我在寻找合适的解决方案来保护线程组,因为我通常会用一个单独的线程做的,那就是:线程1和2一方或双方可以同时锁定互斥男,既不是1也不是2付诸睡觉。 互斥M代表对螺纹3.因此,如果线程3锁定互斥体,而它是由两种线程1或2或两者锁定,那么线程3处于睡眠状态。 如果线程1个或2锁定互斥,而它是由线程3,然后1或2个(取锁吧)也进入休眠状态,直到3个版本中它锁...
谢谢。
我在寻找合适的解决方案来保护线程组,因为我通常会用一个单独的线程做的,那就是:线程1和2一方或双方可以同时锁定互斥男,既不是1也不是2付诸睡觉。 互斥M代表对螺纹3.因此,如果线程3锁定互斥体,而它是由两种线程1或2或两者锁定,那么线程3处于睡眠状态。 如果线程1个或2锁定互斥,而它是由线程3,然后1或2个(取锁吧)也进入休眠状态,直到3个版本中它锁...
谢谢。
如果你的意思是你想永远在关键节更是两个线程,而第三线保持了临界区,那么你必须使用POSIX信号初始化为2.量计数器可以被初始化为任意值,每sem_wait递减计数器(锁定),每sem_post增加它(释放)。 互斥是initiliazed 1信号灯的特殊情况。
如果或者你的意思是你想一个作家线程和两个或多个读者可以使用rwlocks。
然而,我对建议的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
也许,信号灯允许更少麻烦的方式一样,我查一下...