Есть ли какая-либо разница между следующими фрагментами кода с точки зрения использования процессора.
void *ManageSequencer(void *argument){
SomeClass *someClass = (SomeClass *)argument;
while (someClass->ThreadIsAlive()) {
while(someClass->isAsleep) { }
someClass->isAsleep = true;
//thread execution statements
}
return argument;
}
, где некоторые классы периодически устанавливают isAsleep=false
, когда потоку требуется выполнить
ИЛИ
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, который блокирует, пока не будет выполнено условие (приращение семафора выше нуля)?