multithreading - 锁(线程)是原子的吗?

标签 multithreading locking atomic

这听起来像是一个愚蠢的问题,但是如果在多线程应用程序中锁定资源,那么对资源进行的操作是原子完成的吗?

即:当该资源锁定时,处理器是否会被中断或是否会发生上下文切换?如果是这样,那么在它被安排回来完成它的进程之前,没有其他任何东西可以访问这个资源。听起来像一个昂贵的操作。

最佳答案

处理器绝对可以切换到另一个线程,是的。事实上,在大多数现代计算机中,无论​​如何都可以同时运行多个线程。锁定只是确保没有其他线程可以获取相同的锁,因此您可以确保对该资源的操作在该资源方面是原子的。使用其他资源的代码可以完全独立运行。

您通常应该尽可能锁定短期操作。您还可以选择锁的粒度……例如,如果共享对象中有两个独立变量,则可以使用两个单独的锁来保护对这些变量的访问。这可能会提供更好的并发性——但同时,更多的锁意味着更多的复杂性和更多的死锁可能性。在并发方面总是有一个平衡的行为。

关于multithreading - 锁(线程)是原子的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2213905/

相关文章:

java - Java J2ME 中消息传递到异步工作线程

android - 重启后 USB 附件无法通信

java - 谁能解释一下结果?

java - 我应该使用原子整数还是同步

c# - 在方法中使用SemaphoreSlim而不进行异常处理

c# - 锁内锁

c - C 中的非忙阻塞队列实现

c - 原子计数器,达到 0 时可以禁用

c++ - 如何预定义 <atomic> 变量?

java - 使用 Java 原子类进行模块化增量