【发布时间】:2013-01-09 11:35:51
【问题描述】:
考虑以下情况:
我有一个被多个线程使用的对象 foo,它可能会或可能不会重复调用 foo 上的方法 bar()。
bar() 可以并行执行多次,因为它永远不会改变 foo 的状态。
当我需要从外部(从另一个线程,而不是从“工作”线程之一)更改 foo 的状态时,问题就出现了 - 我如何以某种方式锁定 foo,以便调用线程阻塞,直到最后一个工作线程使用 bar() 完成,所有工作线程都会在 bar() 处阻塞,直到我再次释放 foo?
显然,我不能只使用在 bar() 执行期间保持锁定的互斥锁,因为那样我将不会有并发。
有什么想法吗?或者对于这些类型的问题是否有更好的设计?
【问题讨论】:
-
为什么不在工作线程中围绕 bar 函数的调用引入互斥锁,以及在想要更改 foos 状态的调用线程上引入互斥锁。调用线程锁定互斥体,然后可以安全地更改 foo 的状态。
-
pthread_rwlock_t您可能会感兴趣。
标签: c++ synchronization pthreads