是否可以在 C 中构建一种组合的信号量/自旋锁?
也就是说,我想要一个支持的线程控制结构:
- 定期唤醒线程以检查某些变量的状态。(像自旋锁)
- 如果结构的状态被另一个线程(如 sem_wait/sem_post)更改,则自动提前唤醒线程。
例如在这样的程序中:
家长:
while(something){
//do some stuff here.
sem_post(child_sem);
sem_wait(parent_sem);
}
孩子:
while(something_else){
sem_wait(child_sem);
//do some other stuff here.
sem_post(parent_sem);
}
如果孩子未能在 5 秒内设置 parent_sem,我希望父母解除阻塞,但如果孩子提前设置了 parent_sem,我也希望在 5 秒过去之前解除阻塞,同时最大限度地减少检查和重新检查状态所花费的 CPU 周期数在这 5 秒内的 parent_sem。我知道我可以使用自旋锁来做到这一点,但是将等待时间设置为高(即 1 秒)意味着大部分时间浪费了将近 1 秒。将其设置为低(例如 100 毫秒)意味着在孩子超时的情况下进行 50 次检查。这些都不是一个好的解决方案。