【1】线程同步的概念:多个线程操作同一共享资源
在Linux里面建议锁
【2】线程同步的条件
(1)共享资源
(2)竞争关系
(3)多个对象没有同步的机制
【3互斥量】
mutext
(1)初始化
(2)lock枷锁
(3)unlock解锁
【4死锁】
(第一种)对同一个互斥量枷锁两次
(第二种)两个资源,一个线程需要同时拿到两个资源,然后每个线程各拿一个资源
【5读写锁】
一把锁具有两种状态
写独占,读共享
写锁优先级 高
【6条件变量】本身不是锁,可以造成线程阻塞,通常与互斥量配合使用
pthread_cond_t
pthread_cond_wait()函数 有三个作用
1、阻塞等待条件变量满足
2、释放已掌握的互斥量
1、2为原子操作
3、当被唤醒,pthread_cond_wait函数返回时,解除阻塞并重新申请获取互斥锁
条件变量的有点:当条件不满足的时候,线程阻塞,释放cpu,没有竞争关系(mutext有竞争关系)
【7信号量】互斥锁的进化版 lock减1 mutext为0(阻塞);unlock 加1 mutext 为1(非阻塞);
sem_init
提高共同访问共享资源的数量
sem_wait 1.信号量大于0,信号量--
2.信号量等于0,造成阻塞
sem_post将信号量++ 同时唤醒在信号量上的线程
总结:信号量的初值,决定了信号的线程的个数
两个变量同时使用两个函数,wait()-- | post()++