考虑以下情况:
我有一个对象foo,被多个线程使用,这些线程可能会重复调用foo的方法bar()。
当bar()在并行执行时,它不会改变foo的状态,这是完全可以的(也是期望的)。
问题出现在我需要从外部更改foo的状态时(来自另一个线程,而不是其中一个“工作”线程)-如何以一种方式锁定foo,使得调用线程阻塞,直到最后一个工作线程完成bar(),并且所有工作线程都将在bar()处阻塞,直到我再次释放foo?
显然,我不能只使用一个互斥量,在bar()执行期间保持锁定,因为那样就无法实现并发。
有什么想法吗?或者是否有更好的设计来解决这些类型的问题?
我有一个对象foo,被多个线程使用,这些线程可能会重复调用foo的方法bar()。
当bar()在并行执行时,它不会改变foo的状态,这是完全可以的(也是期望的)。
问题出现在我需要从外部更改foo的状态时(来自另一个线程,而不是其中一个“工作”线程)-如何以一种方式锁定foo,使得调用线程阻塞,直到最后一个工作线程完成bar(),并且所有工作线程都将在bar()处阻塞,直到我再次释放foo?
显然,我不能只使用一个互斥量,在bar()执行期间保持锁定,因为那样就无法实现并发。
有什么想法吗?或者是否有更好的设计来解决这些类型的问题?
pthread_rwlock_t
可能会对您感兴趣。 - WhozCraig