互斥锁
互斥锁也叫互斥变量,是一把锁,在访问共享资源时,给共享变量加一把锁,其他线程由于没有持有互斥变量的锁将会阻塞直到该线程释放该互斥锁!
c通过pthread.h下几个方法来实现互斥锁:
pthread_mutex_init:初始化互斥变量
pthread_mutex_lock:给互斥变量加锁
pthread_mutex_unlock:释放互斥变量锁
pthread_mutex_destroy:销毁互斥变量锁
条件变量
条件变量是用来实现线程间的唤醒等待功能的,是对全局变量进行同步的一种机制,主要包括两个动作:
1.一个线程"等待" ""条件变量成立"而挂起
2.另外一个线程使"条件变量"成立
同样通过下面几个方法来使用条件变量:
1.pthread_cond_init:条件变量初始化
2.pthread_cond_wait:将线程加入等待列表中(会释放互斥锁)
3.pthread_cond_signal:唤醒某个持有互斥锁的线程
4.pthread_cond_broadcast:唤醒多个持有互斥锁的线程
两种的关系
为了防止竞争关系,一般条件变量要同互斥锁结合起来使用,线程在改变条件变量时要先给互斥变量加锁,pthread_cond_wait将线程置于等待列表(线程挂起,暂时释放互斥锁),直到被唤醒(继续持有互斥锁)!