在處理器使用情況方面,以下代碼段之間是否存在差異?C:線程semaphore_wait vs while循環
void *ManageSequencer(void *argument){
SomeClass *someClass = (SomeClass *)argument;
while (someClass->ThreadIsAlive()) {
while(someClass->isAsleep) { }
someClass->isAsleep = true;
//thread execution statements
}
return argument;
}
其中一些類定期設置isAsleep=false
時,它需要的線程來執行
OR
void *ManageSequencer(void *argument){
SomeClass *someClass = (SomeClass *)argument;
while (someClass->ThreadIsAlive()) {
semaphore_wait(sem);
//thread execution statements
}
return argument;
}
週期時,它需要的線程來執行,其中SomeClass的要求semaphore_signal(sem);
。
這個問題不是關於原子性,只是while循環是否會導致處理器比信號量解決方案更有效。信號量是否有一個內部的while循環,阻塞直到滿足條件(信號量增加到零以上)?