每个线程组并行线程互斥(Pthread mutex per thread group)

2019-10-18 13:43发布

我在寻找合适的解决方案来保护线程组,因为我通常会用一个单独的线程做的,那就是:线程1和2一方或双方可以同时锁定互斥男,既不是1也不是2付诸睡觉。 互斥M代表对螺纹3.因此,如果线程3锁定互斥体,而它是由两种线程1或2或两者锁定,那么线程3处于睡眠状态。 如果线程1个或2锁定互斥,而它是由线程3,然后1或2个(取锁吧)也进入休眠状态,直到3个版本中它锁...

谢谢。

Answer 1:

如果你的意思是你想永远在关键节更是两个线程,而第三线保持了临界区,那么你必须使用POSIX信号初始化为2.量计数器可以被初始化为任意值,每sem_wait递减计数器(锁定),每sem_post增加它(释放)。 互斥是initiliazed 1信号灯的特殊情况。

如果或者你的意思是你想一个作家线程和两个或多个读者可以使用rwlocks。



Answer 2:

然而,我对建议的POSIX信号读了我发现在“老时尚”这样做的方式(这似乎是我所需的东西):史蒂文斯UNP页。 703,使用pthread_cond中,元代码会是这样:

int var = 0;
pthread_mutex_t M;
pthread_cond_t C;

threadA:      lock M; var++; unlock M; do_job; lock M; var--; cond_signal(&C); unlock M
threadB:      lock M; var++; unlock M; do_job; lock M; var--; cond_signal(&C); unlock M

thread Main:  lock M; while (var > 0) cond_wait(&C, &M); do_protected_job; unlock M

也许,信号灯允许更少麻烦的方式一样,我查一下...



文章来源: Pthread mutex per thread group