簡體   English   中英

線程調度和同步

[英]Thread scheduling and synchronization

線程調度程序是否可以取消將鎖鎖定到同步塊並處於執行中間的線程的調度? 如果是,那么非調度導致線程釋放鎖嗎? 假設線程不調用諸如wait/yield等方法。

我一直在嘗試了解同步塊如何在讀-更新-寫操作中提供幫助? 如果進入同步塊的線程不能被調度,那么它更容易理解,但是如果可以,那么可見性問題就來了,因為變量可能已經被更新但沒有被線程和主線程寫入主存儲器。線程調度程序取消調度它,其他線程獲得鎖並更新主內存中的變量。 是否有任何信息。 在JLS中是否一樣?

線程調度程序是否可以取消對持有[鎖]的線程的調度?

是的,這可以在許多調度算法中搶先發生。 如果線程進行了阻塞的系統調用(例如,等待輸入),則必須發生這種情況。

如果是,那么非調度導致線程釋放鎖嗎?

絕對不! 那會破壞鎖定的目的,並且會破壞大多數多線程程序。


要點:關鍵部分要盡量短! 當線程A被阻塞執行較長的計算(或更糟糕的是,等待輸入)時,不要讓線程B,C,D和E都被阻塞,等待線程A釋放一些鎖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM