プロセッサ使用率に関して次のコードに違いはありますか?C:スレッドsemaphore_waitとwhileループのスレーブ
それが実行するスレッドを必要とするとき工assが定期的にsemaphore_signal(sem);
を呼び出し
OR
void *ManageSequencer(void *argument){
SomeClass *someClass = (SomeClass *)argument;
while (someClass->ThreadIsAlive()) {
semaphore_wait(sem);
//thread execution statements
}
return argument;
}
を実行するスレッドを必要とするとき、いくつかのクラスが定期的にisAsleep=false
を設定
void *ManageSequencer(void *argument){
SomeClass *someClass = (SomeClass *)argument;
while (someClass->ThreadIsAlive()) {
while(someClass->isAsleep) { }
someClass->isAsleep = true;
//thread execution statements
}
return argument;
}
。
この質問は、アトミック性についてではなく、単にwhileループがセマフォーソリューションよりも多くのプロセッサーを引き起こすかどうかについてです。セマフォーは、条件が満たされるまでブロックするwhileループを内部に持っていますか(セマフォーが0より大きい場合)?