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

How to lock some thread using semaphores with OR premitive?

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

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

可以吗?

T2

...
sem_wait(s1)

T1, T3

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