[英]Correct mutual exclusion of threads
在下面的問題中如何組織線程之間的同步?
我有兩個主題,一個作家和一個讀者。 它們都使用共享資源。 當讀取器要求數據塊時,如果傳輸完成,寫入器將開始寫入或退出。 然后,當所有數據塊都寫入后,寫入器將等待下一個讀取器的請求。 讀取器等待,直到數據塊准備就緒或寫入器完成為止。 因此,兩個線程相互排斥。
我不能將yield等用於該任務,因為該語言不支持它。
W ----- /---------\
R----/ \-------- --------
最簡單的方法是使用信號量。 在.net中,可以使用locking 。
信號量是鎖定數據的“經典”方式。
根據您的特定要求,實際上,您可以使用.Net較新版本中提供的“線程安全集合”(System.Collections.Concurrent)之一更好地鎖定:
如果不是所有線程都在更新數據,則還可以通過讀取器/寫入器鎖定(相對於“簡單鎖定”)來提高性能:
希望有幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.