1.定义
官方文档:The NSCondition class implements a condition variable whose semantics follow those used for POSIX-style conditions. A condition object acts as both a lock and a checkpoint in a given thread. The lock protects your code while it tests the condition and performs the task triggered by the condition. The checkpoint behavior requires that the condition be true before the thread proceeds with its task. While the condition is not true, the thread blocks. It remains blocked until another thread signals the condition object.
NSCondition 的对象实际上作为一个锁和一个线程检查器:锁主要为了当检测条件时保护数据源,执行条件引发的任务;线程检查器主要是根据条件决定是否继续运行线程,即线程是否被阻塞。
2.使用
NSConditon *condition =[ [NSCondition alloc]]init;
[condition lock];//一般用于多线程同时访问、修改同一个数据源,
保证在同一时间内数据源只被访问
、修改一次,其他线程的命令需要在lock 外等待,只到unlock ,才可访问
[condition unlock];//与lock 同时使用
[condition wait];//让当前线程处于等待状态
[condition signal];//CPU发信号告诉线程不用在等待,可以继续执行
有些情况需要协调线程之间的执行。例如,一个线程可能需要等待其他线程的返回结果。NSCondition可以原子性的释放锁,从而使得其他等待的线程可以获取锁,而初始的线程继续等待。
一个线程会等待释放锁的条件变量。另一个线程会统治者变量释放该锁,并唤醒等待中的线程。
使用NSCondition解决标准的生产者-消费者问题。例子如下
网友评论