从这个 Apple 的关于 的文档中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];
您可以使用此方法唤醒一个正在等待条件的线程。您可以多次调用此方法来唤醒多个线程。如果没有线程在等待条件,则此方法不执行任何操作。为了避免竞争条件,你应该只在接收者被锁定时调用这个方法。
我的问题是:
我不希望Thread 2在任何情况下都被阻塞,所以我删除了Thread 2lock
中的andunlock
调用。也就是说,线程 2可以放任意多的工作,线程 1会一个一个地完成工作,如果没有更多工作,它会等待(阻塞)。这也是生产者-消费者模式,但生产者从未被阻塞。
但是根据 Apple 的文档,这种方式是不正确的 那么这种模式可能会出现什么问题呢?谢谢。