【发布时间】:2015-01-16 01:51:12
【问题描述】:
从this Apple's document about NSCondition,NSCondition的用法应该是:
头 1:
[cocoaCondition lock];
while (timeToDoWork <= 0)
[cocoaCondition wait];
timeToDoWork--;
// Do real work here.
[cocoaCondition unlock];
线程 2:
[cocoaCondition lock];
timeToDoWork++;
[cocoaCondition signal];
[cocoaCondition unlock];
在the document of method signal in NSConditon:
您使用此方法唤醒一个正在等待条件的线程。您可以多次调用此方法来唤醒多个线程。如果没有线程在等待条件,则此方法不执行任何操作。 为避免竞争条件,您应该仅在接收器被锁定时调用此方法。
我的问题是:
我不希望 Thread 2 在任何情况下都被阻塞,因此我删除了 Thread 2 中的 lock 和 unlock 调用。也就是说,线程 2 可以放任意多的工作,线程 1 会一个一个地完成工作,如果没有更多工作,它会等待(阻塞)。这也是生产者-消费者模式,但生产者从未被阻塞。
但是根据 Apple 的文档,这种方式不正确 那么这种模式可能会出现什么问题呢?谢谢。
【问题讨论】:
标签: ios objective-c multithreading nscondition