簡體   English   中英

正確互斥線程

[英]Correct mutual exclusion of threads

在下面的問題中如何組織線程之間的同步?

我有兩個主題,一個作家和一個讀者。 它們都使用共享資源。 當讀取器要求數據塊時,如果傳輸完成,寫入器將開始寫入或退出。 然后,當所有數據塊都寫入后,寫入器將等待下一個讀取器的請求。 讀取器等待,直到數據塊准備就緒或寫入器完成為止。 因此,兩個線程相互排斥。

我不能將yield等用於該任務,因為該語言不支持它。

W     -----         /---------\
R----/     \--------           --------

聽起來像讀寫器問題:

聽說過信號燈或類似的東西;)?

http://en.wikipedia.org/wiki/Readers-writers_problem

最簡單的方法是使用信號量。 在.net中,可以使用locking

信號量是鎖定數據的“經典”方式。

根據您的特定要求,實際上,您可以使用.Net較新版本中提供的“線程安全集合”(System.Collections.Concurrent)之一更好地鎖定:

如果不是所有線程都在更新數據,則還可以通過讀取器/寫入器鎖定(相對於“簡單鎖定”)來提高性能:

希望有幫助

暫無
暫無

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

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