繁体   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