[英]Thread scheduling and synchronization
线程调度程序是否可以取消将锁锁定到同步块并处于执行中间的线程的调度? 如果是,那么非调度导致线程释放锁吗? 假设线程不调用诸如wait/yield
等方法。
我一直在尝试了解同步块如何在读-更新-写操作中提供帮助? 如果进入同步块的线程不能被调度,那么它更容易理解,但是如果可以,那么可见性问题就来了,因为变量可能已经被更新但没有被线程和主线程写入主存储器。线程调度程序取消调度它,其他线程获得锁并更新主内存中的变量。 是否有任何信息。 在JLS中是否一样?
线程调度程序是否可以取消对持有[锁]的线程的调度?
是的,这可以在许多调度算法中抢先发生。 如果线程进行了阻塞的系统调用(例如,等待输入),则必须发生这种情况。
如果是,那么非调度导致线程释放锁吗?
绝对不! 那会破坏锁定的目的,并且会破坏大多数多线程程序。
要点:关键部分要尽量短! 当线程A被阻塞执行较长的计算(或更糟糕的是,等待输入)时,不要让线程B,C,D和E都被阻塞,等待线程A释放一些锁。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.