![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
线程同步
实习时候需要学习的一块很重要的内容
RichYoungZz
这个作者很懒,什么都没留下…
展开
-
条件变量基础
通常,条件变量和互斥锁搭配使用。 条件变量是用来弥补互斥锁的不足的。在我们使用互斥锁的时候,往往是为了等待某个线程修改完数据之类的条件满足后,释放互斥锁。这个过程中,其他线程会尝试竞争锁,竞争失败后才会进入阻塞队列,这个过程还是会消耗CPU的资源。 而使用条件变量以后,当条件满足的时候,会发送信号去唤醒等待这个条件的线程,去加锁,再判断条件是否满足。 至于为什么要再判断条件,这个一会再提。 总之,使用条件变量以后,线程就不需要主动去竞争锁,而是等待着被唤醒,这样可以提高CPU是利用率。 1.初始化条件变量原创 2022-03-08 18:05:06 · 208 阅读 · 0 评论 -
互斥锁基础
互斥锁并不难,只要了解它的函数就可以去简单使用了。 1.初始化锁 1.1动态初始化 对于每把互斥锁,都有一个互斥变量,它是一个特殊的数据类型pthread_mutex_t。 int pthread_mutex_init(pthread_mutex_t *mutex,const pthread_mutex_attr_t *mutexattr); 我们可以自己建立一个pthread_mutex_t类型变量,再用如上函数初始化,第一个参数就不用说了,传入互斥变量的地址。 第二个变量用于指定锁的属性,一共有四种属原创 2022-02-09 14:49:29 · 5124 阅读 · 0 评论 -
线程同步入门
1.什么是线程同步 线程同步是协调的意思。线程之间本身存在异步性,以不可预知的速度去推进程序的执行,这就需要我们采用加锁等方式,使得线程按照我们想要的顺序去完成执行。 假如线程A去完成事情A,之后线程B使用线程A的完成事情A的结果去完成事情B,否则就会程序出错。由于异步性,如果没有外加干涉,程序是很有可能出错的。那么当线程A开始进行事情A之前,我们就加一个锁,到线程B的时候,线程B发现锁并没有解开,就会阻塞直到线程A完成,这样就避免了程序出错。 2.什么时候需要线程同步 通常,多线程访问公共资源的时候就需要原创 2022-02-09 12:03:12 · 2733 阅读 · 0 评论