是否可以在C中构建一种组合的信号量/旋转锁定?组合信号量和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);
}
我想父疏通如果孩子不能设置parent_sem在5秒钟之内,如果孩子已经早点设置了parent_sem,则在5秒钟之前解除阻塞,同时最小化CPU周期消耗的数量在这5秒内检查并重新检查parent_sem的状态。我知道我可以用旋转锁来做到这一点,但是将等待时间设置得很高(即1秒)意味着大部分时间浪费近1秒。设置为低(例如100ms)意味着在孩子超时的情况下进行50次检查。这些都不是一个很好的解决方案。
“定期唤醒线程以检查某些变量的状态(如自旋锁)”自旋锁并不会唤醒线程,因为自旋锁是一个锁,当它保持时,它会保持CPU在旋转(即使用全部CPU)一段时间,直到释放锁。主要用于持续时间很短的锁 –