在循环时阻塞互斥量是否等于空?

wh1*_*t1k 2 iphone concurrency multithreading objective-c

我正在为iPhone编写并发应用程序.我想知道这段代码:

while(!conditionBoolean)
{
    // do nothing
    // until another thread makes this variable true.
}

makeWork();
Run Code Online (Sandbox Code Playgroud)

相当于以下内容:

[lock lock];       // this lock is locked by another thread
                   // causing the current to block until it's unlocked

[lock unlock];
 makeWork();
Run Code Online (Sandbox Code Playgroud)

如果不是,有什么区别?

谢谢.

Ste*_*end 6

你应该更喜欢第二个,第一个会产生一个紧密的循环和延迟,甚至可能阻止变量按照你想要/期望的方式设置.至少你必须在那个循环中引入延迟,某种类型的睡眠.

更好的是等待信号原语完成工作,然后由另一个线程发出信号 - 然后设计是确定性的,而不是依赖于某个其他线程可能锁定或修改的互斥锁或状态变量你的机会.一般来说,多线程设计最好是事件驱动(推模型),而不是机会性地检查共享状态(拉模型).