pthread_mutex_t _mutex
pthread_cond_t _cond
- (void)mutexInit {
pthread_mutex_init(&_mutex,NULL);
phtread_cond_init(&_cond,NULL);
}
-(void)mutexWait {
pthread_mutex_lock(&_mutex);
pthread_cond_wait(&_cond,&_mutex);
pthread_mutex_unlock(&_mutex) ;
}
- (void)mutexSingal {
pthread_mutex_lock(&_mutex);
pthread_cond_singal(&_cond);
pthread_mutex_unlock(&_mutex);
}
条件锁需要和互斥锁配合使用,如果在没有mutex,在调用wait还没有进入wait状态,如果另一个线程执行了singal则会导致该次singal丢失,因此需要与一个互斥锁配合使用
关于原子操作
原子操作表示一条不可打断的操作,也就是说线程在执行的时候不会被操作系统挂起,而是会一定执行完成,在多处理器的环境下,一条汇编指令显然就是一条原子操作,因为中断也需要通过指令控制。
在多处理器环境下,能够被多个处理器同时操作的指令仍然算不上原子操作,因此真正的原子操作必须有硬件层提供,比如x86平台上如果在指令前面加上lock前缀,对应的机器码在执行时会把总线锁住,使得其他cpu不能再执行相同的操作,从而从硬件层面保证了操作的原子性。