笔记 ---线程同步 基础 四种同步方式

【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()++

猜你喜欢

转载自blog.csdn.net/u014749668/article/details/81254900