C++ 等待多个线程(Posix线程,c+;+;)

C++ 等待多个线程(Posix线程,c+;+;),c++,synchronization,pthreads,C++,Synchronization,Pthreads,考虑以下情况: 我有一个由多个线程使用的对象foo,它可能会也可能不会重复调用foo上的方法bar() bar()可以并行执行多次,因为它不会改变foo的状态 当我需要从外部(从另一个线程,而不是从一个“工作”线程)更改foo的状态时,问题就出现了——我如何锁定foo,以便调用线程阻塞直到最后一个工作线程使用bar()完成,并且所有工作线程将阻塞bar(),直到我再次释放foo 显然,我不能只使用一个在bar()执行期间保持锁定的互斥体,因为这样我就不会有并发性 有什么想法吗?或者对于这些类型的

考虑以下情况:

我有一个由多个线程使用的对象foo,它可能会也可能不会重复调用foo上的方法bar()

bar()可以并行执行多次,因为它不会改变foo的状态

当我需要从外部(从另一个线程,而不是从一个“工作”线程)更改foo的状态时,问题就出现了——我如何锁定foo,以便调用线程阻塞直到最后一个工作线程使用bar()完成,并且所有工作线程将阻塞bar(),直到我再次释放foo

显然,我不能只使用一个在bar()执行期间保持锁定的互斥体,因为这样我就不会有并发性


有什么想法吗?或者对于这些类型的问题有更好的设计吗?

我不确定您将如何实现,没有任何工作人员使用foo让writer更新它,但如果这不重要,那么只需使用(工作人员获取读锁,编写器获取写锁)


值得一提的是,你可能想考虑写FO拷贝。这样,您将使同步开销接近于零。您可以使用来实现这一点。

查看为什么不在调用bar函数的辅助线程中引入互斥,以及在希望更改foos状态的调用线程中引入互斥。调用线程锁定互斥锁并可以安全地更改foo的状态。
pthread\u rwlock\u t
可能会引起您的兴趣。