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狀態(tài)锥咸,如果另一個線程執(zhí)行了singal則會導致該次singal丟失眯杏,因此需要與一個互斥鎖配合使用
關于原子操作
原子操作表示一條不可打斷的操作录煤,也就是說線程在執(zhí)行的時候不會被操作系統掛起,而是會一定執(zhí)行完成又谋,在多處理器的環(huán)境下拼缝,一條匯編指令顯然就是一條原子操作,因為中斷也需要通過指令控制彰亥。
在多處理器環(huán)境下咧七,能夠被多個處理器同時操作的指令仍然算不上原子操作,因此真正的原子操作必須有硬件層提供任斋,比如x86平臺上如果在指令前面加上lock前綴猪叙,對應的機器碼在執(zhí)行時會把總線鎖住,使得其他cpu不能再執(zhí)行相同的操作仁卷,從而從硬件層面保證了操作的原子性穴翩。