如何使用带有OR前缀的信号量锁定某些线程?

时间:2018-09-02 15:27:25

标签: multithreading operating-system semaphore

我正在考虑一个示例,以进一步评估我的问题。考虑三个线程T_1,T_2和T_3。

  • 如果T_2在T_1完成其主要段之前无法执行,那么我只需在T_2的开头放置一个semwait()并将相同信号量的semsignal()放置。
  • 如果在T_1和T_3完成其主要代码段之前T_2无法执行,那么我将仅让T_2在T_1和T_3的末尾分别等待两个semsignal()函数。

但是,如果T_2在T_1或T_3完成其主要代码段之前无法执行,该怎么办?如果我让它在某些OR函数上等待,则即使第一个表达式T_1不允许运行,而T_3允许它运行,它甚至可能不会测试第二个表达式就被阻塞。所以我的问题是,如何让它等待这种情况?

1 个答案:

答案 0 :(得分:0)

你会喜欢吗?

T2

...
sem_wait(s1)

T1,T3

...
mutex_lock(m1)
if (!signaled) {
    sem_signal(s1)
    signaled = true;
}
mutex_unlock(m1)