文章目录

  • 线程同步机制
  • 互斥锁
  • 互斥锁使用示例

线程同步机制


线程同步机制引入 : 多个线程读取同一个资源时 , 可能会造成冲突 , 因此需要引入线程同步机制 , 让多个线程按照一定规则对共享的资源进行操作 ;

互斥锁


互斥锁使用流程 : ① 声明互斥锁 , ② 初始化互斥锁 , ③ 加锁 , ④ 解锁 , ⑤ 销毁互斥锁 ;

  • ① 声明互斥锁 ;
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 互斥锁相关推荐

  1. c语言多线程互斥锁示例

    #include<pthread.h> #include<unistd.h> #include<stdio.h> #include<stdlib.h>p ...

  2. 同步方法中的锁对象_互斥锁与读写锁:如何使用锁完成Go程同步?

    图转自https://colobu.com/2018/12/18/dive-into-sync-mutex/ 这张图容易让人产生误解,容易让人误以为goroutine1获取的锁,只有goroutine ...

  3. Go语言实现原理——锁实现原理

    本文目录 锁实现原理 1.概述 2.实现原理 3.互斥锁 3.1.Lock 3.2.Unlock 4.读写锁 4.1.概述 4.2.原理 5.小结 锁实现原理 1.概述 在多线程环境下,经常会设有临界 ...

  4. c/c++:线程同步(互斥锁、死锁、读写锁、条件变量、生产者和消费者模型、信号量)

    目录 1. 概念 2. 互斥锁 3. 死锁 4. 读写锁 5. 条件变量 5.1 生产者和消费者模型 6. 信号量 1. 概念 线程同步: > 当有一个线程在对内存进行操作时,其他线程都不可以对 ...

  5. Linux线程-互斥锁pthread_mutex_t

    在线程实际运行过程中,我们经常需要多个线程保持同步.这时可以用互斥锁来完成任务:互斥锁的使用过程中,主要有pthread_mutex_init,pthread_mutex_destory,pthrea ...

  6. Linux线程-互斥锁pthread_mutex_t

    Linux线程-互斥锁pthread_mutex_t 在线程实际运行过程中,我们经常需要多个线程保持同步.这时可以用互斥锁来完成任务:互斥锁的使用过程中,主要有pthread_mutex_init, ...

  7. Go语言 读写锁互斥锁原理剖析(2)

    互斥锁(百科)定义:"在编程中,引入了对象互斥锁的概念,来保证共享数据操作的完整性.每个对象都对应于一个可称为" 互斥锁" 的标记,这个标记用来保证在任一时刻,只能有一个 ...

  8. 互斥锁pthread_mutex_t的使用

    1. 互斥锁创建         有两种方法创建互斥锁,静态方式和动态方式.POSIX定义了一个宏PTHREAD_MUTEX_INITIALIZER来静态初始化互斥锁,方法如下: pthread_mu ...

  9. Linux多线程开发-线程同步-互斥锁pthread_mutex_t

    1.互斥锁 同一时刻只允许一个线程对临界区进行访问.POSIX库中用类型pthread_mutex_t来定义互斥锁,类型在pthreadtypes.h中定义. 2.如何声明一个互斥锁 #include ...

最新文章

  1. 最近火了的自动驾驶全球产业链全景图
  2. Android开发学习——android体系结构
  3. ubuntu系统debootstrap的使用
  4. 8.2.1.2 How MySQL Optimizes WHERE Clauses MySQL 优化WHERE 子句
  5. Linux协议栈(7)——网络层实现
  6. conv--向量的卷积和多项式乘法
  7. html5 video js控制摄像头的焦距,html 通过input video canvas 打开摄像头 定制相机
  8. Java方法的引用(打造Lambda表达式的升级版)
  9. 实训09.11:数据库一些简单操作
  10. mysql分库一致性_分库分表带来的完整性和一致性问题
  11. 01-01 Linux系统与shell环境准备
  12. ERROR:ModuleNotFoundError: No module named ‘cv2‘
  13. 数据结构c语言描述第课后答案李学刚,数据结构(C语言描述)(第2版)
  14. 三种方式在spring容器中为bean实现初始化方法和销毁方法
  15. 想要玩转Mac?试试这几款神器吧!
  16. cz.cc免费域名申请教程(因为有朋友不知道怎么操作,特写此简单教程)
  17. linux shell自动登录,Shell自动登录并执行命令
  18. MCS:离散随机变量——Binomial分布
  19. 考试系统设计oracle,在线考试系统的设计与实现|毕业设计源代码|论文开题报告|Oracle...
  20. linux5关闭apic服务,阐述Linux内核里面的APIC编程

热门文章

  1. [windows版]搭建php的redis环境
  2. C# 字符串大小写混合转换(同时进行)
  3. 查找文本字母并且统计个数
  4. 20172311-哈夫曼编码测试
  5. 【转载】如何学JavaScript?前辈的经验之谈
  6. 洛谷 P1019 单词接龙 (DFS)
  7. 从CMOS到触发器(一)
  8. Python3 高级特性
  9. jQuery学习笔记之extend方法小结
  10. U盘安装Linux CentOS 6.5 64位操作系统(来自互联网)