互斥锁的使用

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不能再执行相同的操作,从而从硬件层面保证了操作的原子性。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容