行业知识
音视频学习笔记——c++多线程(二)
2026-11-14 11:29:17
来源:互联网转载
✊✊✊大家好!���篇文章是多线程系列第二篇文章。首先讲解了利用mutex解决多线程数据共享问题,举例更好理解lock和unlock的使用方法,以及错误操作造成的***锁问题,最后讲解了lock_guard与unique_lock使用的注意事项。
c++多线程系列目录:
c++多线程(一): 多进程和多线程并发**的区别以及各自优缺点,Thead线程库的基本使用。
对多线程其他内容感兴趣的同学可以点击上方目录链接跳转。
本专栏知识点是通过的音视频流媒体高级开发课程进行系统学习,梳理总结后写下文章,对音视频相关内容感兴趣的读者,可以点击观看课程网址:零声教育
导航小助手
- 一、互斥量(Mutex)
- 1.1 lock和unlock
- 1.2 ***锁
- 1.3lock_guard与unique_lock
- 二、小结
一、互斥量(Mutex)
当多个线程同时访问同一个变量,并且其中至少有一个线程对该变量进行了写操作,那么就会出现数据竞争问题。数据竞争可能会导致程序崩溃、产生未定义的结果,或者得到错误的结果。
为了避免数据竞争问题,需要使用同步机制来确保多个线程之间对共享数据的访问是安全的。常见的同步机制包括互斥量、条件变量、原子操作等。
互斥量(mutex)是一种用于实现多线程同步的机制,用于确保多个线程之间对共享资源的访问互斥。互斥量通常用于保护共享数据的访问,以避免多个线程同时访问同一个变量或者数据结构而导致的数据竞争问题。
1.1 lock和unlock
mutex常用操作:
- lock():资源上锁
- unlock():解锁资源
- trylock():查看是否上锁,它有下列3种类情况:
- (1)未上锁返回false,并锁住;
- (2)其他线程已经上锁,返回true;
- (3)同一个线程已经对它上锁,将会产生***锁。
***锁:在两个或两个以上的进程在执行过程中,由于竞争资源或者彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于***锁状态或系统产生了***锁,这些永远在互相等待的进程称为***锁进程。
下面举一个实例:
添加lock()和unlock():
#include #include #include using namespace std;int shared_data = 0;mutex mtx;void func(int n) { for (int i = 0; i
下一篇:谷歌服务器怎么打开教程?