簡體   English   中英

如何避免在多線程程序中不必要的阻塞?

[英]How can I avoid unnecessary blocking in a multithreaded program?

給定2個方法methodB() methodA()methodB() ,有沒有辦法使它們同步,從而使methodA()不與其自身同步? 也就是說,許多線程可以同時執行methodA()

  • 調用methodA()應該阻塞,直到methodB()未運行。
  • 調用methodB()應被阻塞,直到既不methodB()methodA()正在運行。

您可以使用ReentrantReadWriteLock。

在methodA上鎖定readLock,在methodB上鎖定writeLock。 這將允許通過多個線程調用methodA,但不允許同時調用methodA和methodB(或methodB和methodB)。

更多背景信息:ReadLock允許並行讀取。 WriteLock是排他性的,不允許再進行讀取或寫入。 通常,如果有一些線程正在讀取並且某些線程要寫入,則將進一步的讀取請求排隊,直到寫入線程完成該工作為止。 這稱為公平/不公平算法,必要時可以在構造函數中進行配置。

暫無
暫無

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

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