是否可以在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)一段時間,直到釋放鎖。主要用於持續時間很短的鎖 –