以下代码在处理器使用方面有什么区别吗?
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循环,一直阻塞直到条件被满足(信号量增加到大于零)?