让线程休眠
如果任务处理完毕,最好让线程休眠,任务来了再唤醒它,在ios中你可以用以下2种方法。
1.使用pthread线程
pthread_mutex_lock 加锁
pthread_mutex_unlock 解锁
pthread_cond_broadcast 唤醒所有线程
pthread_cond_singal 唤醒任意等待的线程
pthread_cond_wait 解锁并进入等待状态
以下是apple文档的例子
pthread_mutex_t mutex;
pthread_cond_t condition;
Boolean ready_to_go = true;
void MyCondInitFunction()
{
/**
* 初始化mutex,condition
**/
pthread_mutex_init(&mutex);
pthread_cond_init(&condition, NULL);
}
void MyWaitOnConditionFunction()
{
/**
* 加锁
**/
pthread_mutex_lock(&mutex);
/**
* 没有任务了,线程解锁,并进入等待状态
**/
while(ready_to_go == false){
pthread_cond_wait(&condition, &mutex);
}
/**
* 此处是处理任务代码
*/
……
/**
* 处理完毕了
*/
ready_to_go = false;
/**
* 解锁
**/
pthread_mutex_unlock(&mutex);
}
void SignalThreadUsingCondition()
{
/**
* 加锁
**/
pthread_mutex_lock(&mutex);
/**
* 添加任务
**/
……
/**
* 有任务了
**/
ready_to_go = true;
/**
* 唤醒线程处理
**/
pthread_cond_signal(&condition);
/**
* 解锁
**/
pthread_mutex_unlock(&mutex);
}
2.NSCondition类,是对pthread的con的封装
NSCondition:lock 对应pthread的pthread_mutex_lock
NSCondition:unlock 对应pthread的pthread_mutex_unlock
NSCondition:broadcast 对应phread的pthread_cond_broadcast
NSConditon:singal 对应pthread的pthread_cond_singal
NSCondition:wait 对应pthread的pthread_con_wait