【C++ 语言】pthread_mutex_t 互斥锁
文章目录
- 线程同步机制
- 互斥锁
- 互斥锁使用示例
线程同步机制
线程同步机制引入 : 多个线程读取同一个资源时 , 可能会造成冲突 , 因此需要引入线程同步机制 , 让多个线程按照一定规则对共享的资源进行操作 ;
互斥锁
互斥锁使用流程 : ① 声明互斥锁 , ② 初始化互斥锁 , ③ 加锁 , ④ 解锁 , ⑤ 销毁互斥锁 ;
- ① 声明互斥锁 ;
pthread_mutex_t mutex_t;
- ② 初始化互斥锁 :
//初始化互斥锁pthread_mutex_init(&mutex_t, 0);
- ③ 加锁 :
//先用互斥锁上锁pthread_mutex_lock(&mutex_t);
- ④ 解锁 :
//操作完毕后, 解锁pthread_mutex_unlock(&mutex_t);
- ⑤ 销毁互斥锁 :
//销毁互斥锁pthread_mutex_destroy(&mutex_t);
互斥锁使用示例
代码示例 :
#include "005_Thread.h"
#include <pthread.h>//引入队列的头文件
#include <queue>using namespace std;/*互斥锁 :声明 : 先声明互斥锁初始化 : 在进行初始化操作销毁 : 使用完毕后 , 要将该互斥锁销毁
*/
pthread_mutex_t mutex_t;//声明一个队列变量
// 该变量是全局变量
// 该变量要在不同的线程中访问 , 用于展示线程同步
queue<int> que;/*操作线程方法 : 参数和返回值都是 void* 类型互斥锁使用 : 多个线程对一个队列进行操作 , 需要使用互斥锁将该队列锁起来 , pthread_mutex_lock使用完毕后在进行解锁 , pthread_mutex_unlock该类型的锁与 Java 中的 synchronized 关键字一样 , 属于悲观锁其作用是通过 mutex 互斥锁 , 将上锁与解锁之间的代码进行同步
*/
void* queue_thread_fun(void* args) {//先用互斥锁上锁pthread_mutex_lock(&mutex_t);if (!que.empty()) {//打印队列中的第一个元素printf("获取 queue_thread 队列第一个数据 : %d\n", que.front());//将队列首元素弹出que.pop();}else {printf("获取 queue_thread 队列为空\n");}//操作完毕后, 解锁pthread_mutex_unlock(&mutex_t);return 0;
}/*如果 8 个线程同时读取队列中的信息 , 会出现程序崩溃在多线程环境下 , 对队列进 queue_thread 行操作 , queue_thread 是线程不安全的这里需要加锁 , 进行 线程同步的操作
*/
int main()
{//初始化互斥锁pthread_mutex_init(&mutex_t, 0);//向其中加入几个int数据for (size_t i = 0; i < 5; i++) {que.push(i);}//创建多个线程操作 queue_thread 队列pthread_t pids[8];for (size_t i = 0; i < 8; i++) {//创建线程pthread_create(&pids[i], 0, queue_thread_fun, 0);}//销毁互斥锁pthread_mutex_destroy(&mutex_t);return 0;
}
执行结果 :
获取 queue_thread 队列第一个数据 : 0
获取 queue_thread 队列第一个数据 : 1
获取 queue_thread 队列第一个数据 : 2
获取 queue_thread 队列第一个数据 : 3
获取 queue_thread 队列第一个数据 : 4
获取 queue_thread 队列为空
获取 queue_thread 队列为空
【C++ 语言】pthread_mutex_t 互斥锁相关推荐
- c语言多线程互斥锁示例
#include<pthread.h> #include<unistd.h> #include<stdio.h> #include<stdlib.h>p ...
- 同步方法中的锁对象_互斥锁与读写锁:如何使用锁完成Go程同步?
图转自https://colobu.com/2018/12/18/dive-into-sync-mutex/ 这张图容易让人产生误解,容易让人误以为goroutine1获取的锁,只有goroutine ...
- Go语言实现原理——锁实现原理
本文目录 锁实现原理 1.概述 2.实现原理 3.互斥锁 3.1.Lock 3.2.Unlock 4.读写锁 4.1.概述 4.2.原理 5.小结 锁实现原理 1.概述 在多线程环境下,经常会设有临界 ...
- c/c++:线程同步(互斥锁、死锁、读写锁、条件变量、生产者和消费者模型、信号量)
目录 1. 概念 2. 互斥锁 3. 死锁 4. 读写锁 5. 条件变量 5.1 生产者和消费者模型 6. 信号量 1. 概念 线程同步: > 当有一个线程在对内存进行操作时,其他线程都不可以对 ...
- Linux线程-互斥锁pthread_mutex_t
在线程实际运行过程中,我们经常需要多个线程保持同步.这时可以用互斥锁来完成任务:互斥锁的使用过程中,主要有pthread_mutex_init,pthread_mutex_destory,pthrea ...
- Linux线程-互斥锁pthread_mutex_t
Linux线程-互斥锁pthread_mutex_t 在线程实际运行过程中,我们经常需要多个线程保持同步.这时可以用互斥锁来完成任务:互斥锁的使用过程中,主要有pthread_mutex_init, ...
- Go语言 读写锁互斥锁原理剖析(2)
互斥锁(百科)定义:"在编程中,引入了对象互斥锁的概念,来保证共享数据操作的完整性.每个对象都对应于一个可称为" 互斥锁" 的标记,这个标记用来保证在任一时刻,只能有一个 ...
- 互斥锁pthread_mutex_t的使用
1. 互斥锁创建 有两种方法创建互斥锁,静态方式和动态方式.POSIX定义了一个宏PTHREAD_MUTEX_INITIALIZER来静态初始化互斥锁,方法如下: pthread_mu ...
- Linux多线程开发-线程同步-互斥锁pthread_mutex_t
1.互斥锁 同一时刻只允许一个线程对临界区进行访问.POSIX库中用类型pthread_mutex_t来定义互斥锁,类型在pthreadtypes.h中定义. 2.如何声明一个互斥锁 #include ...
最新文章
- 最近火了的自动驾驶全球产业链全景图
- Android开发学习——android体系结构
- ubuntu系统debootstrap的使用
- 8.2.1.2 How MySQL Optimizes WHERE Clauses MySQL 优化WHERE 子句
- Linux协议栈(7)——网络层实现
- conv--向量的卷积和多项式乘法
- html5 video js控制摄像头的焦距,html 通过input video canvas 打开摄像头 定制相机
- Java方法的引用(打造Lambda表达式的升级版)
- 实训09.11:数据库一些简单操作
- mysql分库一致性_分库分表带来的完整性和一致性问题
- 01-01 Linux系统与shell环境准备
- ERROR:ModuleNotFoundError: No module named ‘cv2‘
- 数据结构c语言描述第课后答案李学刚,数据结构(C语言描述)(第2版)
- 三种方式在spring容器中为bean实现初始化方法和销毁方法
- 想要玩转Mac?试试这几款神器吧!
- cz.cc免费域名申请教程(因为有朋友不知道怎么操作,特写此简单教程)
- linux shell自动登录,Shell自动登录并执行命令
- MCS:离散随机变量——Binomial分布
- 考试系统设计oracle,在线考试系统的设计与实现|毕业设计源代码|论文开题报告|Oracle...
- linux5关闭apic服务,阐述Linux内核里面的APIC编程