线程互斥锁

news2024/11/26 18:54:22

互斥锁

类型

pthread_mutex_t

互斥锁基本操作

函数描述
[[pthread_mutex_initpthread_mutex_init]]初始化互斥锁
[[pthread_mutex_lockpthread_mutex_lock]]阻塞申请互斥锁
[[pthread_mutex_unlockpthread_mutex_unlock]]释放互斥锁
[[pthread_mutex_trylockpthread_mutex_trylock]]非阻塞申请互斥锁
[[pthread_mutex_destroypthread_mutex_destroy]]销毁互斥锁

互斥锁属性的基本操作

函数描述
[[pthread_mutexattr_initpthread_mutexattr_init]]初始化属性对象
[[pthread_mutexattr_destroypthread_mutexattr_destroy]]销毁属性对象
[[pthread_mutexattr_settypepthread_mutexattr_settype]]设置属性对象的属性
[[pthread_mutexattr_gettypepthread_mutexattr_gettype]]获得属性对象的属性

示例:基于互斥锁实现生产者与消费者模型
要求:1、主线程作为消费者线程 2、n个子线程作为生产者线程

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>

static pthread_mutex_t mutex;
static int product_number=0;

void * thread_handle(void *arg){
    int loopCount=atoi((char*)arg);
    for(int i=0;i<loopCount;i++){
        pthread_mutex_lock(&mutex);
        printf("生产者: product_number=%d\n",++product_number);
        pthread_mutex_unlock(&mutex);
    }
    pthread_exit(NULL);
}

int main(int argc,char* argv[]){
    if(argc<2){
        return 1;
    }
    pthread_t thread[argc-1];
    int ret=0;
    int production_number=0;
    int consumption_number=0;

    for(int i=0;i<argc-1;i++){
        production_number+=atoi(argv[i+1]);
        ret=pthread_create(thread+i,NULL,thread_handle,(void *)argv[i+1]);
        if(ret!=0){
            exit(EXIT_FAILURE);
        }
    }
    while(1){
        pthread_mutex_lock(&mutex);
        while(product_number>0){
            printf("消费者:product_number=%d consumption_number=%d\n",--pro  duct_number,++consumption_number);
        }
        pthread_mutex_unlock(&mutex);
        if(production_number==consumption_number){
            break;
        }
    }
    for(int i=0;i<argc-1;i++){
        pthread_join(thread[i],NULL);
    }
    pthread_mutex_destroy(&mutex);
    return 0;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2063122.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全网最全PMP备考攻略(附答题技巧)

01为什么要考PMP 大家都是成年人&#xff0c;提出问题的目的是为了解决问题。所以问为什么&#xff0c;这个出发点就是错的。 你要知道&#xff0c;正确的知识必然是有用处的。 还是有人会觉得从小学到大学甚至研究生毕业&#xff0c;你学的东西都没有用武之地&#xff1f; …

写论文找不到灵感?ChatGPT能提供的一些帮助

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 在学术写作过程中&#xff0c;许多读者常常会面临一个问题——找不到灵感。面对庞大的文献和复杂的研究方向&#xff0c;往往感到无从下手。随着人工智能技术的发展&#xff0c;像ChatG…

滚雪球学Java(88):连接无限,资源有度:JavaSE数据库连接池深度解析,有两下子!

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java SE啦&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好习惯&#…

“探索消费增值模式:绿色消费与积分回馈的双重盛宴“

大家好&#xff0c;我是吴军&#xff0c;来自一家知名的软件开发企业&#xff0c;担任产品经理的角色。今天&#xff0c;我想和大家探讨一个新兴的商业模式——消费增值模式&#xff0c;它在市场上正逐渐崭露头角。 近年来&#xff0c;随着环保和可持续发展日益受到消费者的关注…

HT3S-ECS-MTP网关支持与倍福C6015控制器PLC环网通讯

倍福控制器C6015通过HT3S-ECS-MTP网关进行ETHERCAT环网通讯 北京中科易联科技有限公司 1、概述 本文描述倍福C6015控制器与网关HT3S-ECS-MTP测试EtherCAT环网&#xff0c;并进行数据交换的组态过程及运行结果。使用到的软硬件列表如下&#xff1a; 1台倍福C6015控制器, 使用…

【Qt笔记】Qt界面显示时间

目录 一、前言 二、基本概念 三、代码实现 1. 获取本地时间&#xff0c;并将其转换成自己想要的格式 2.创建一个QLabel控件用于显示时间字符串 3.创建QTimer定时器更新时间 四、优化 1. 格式优化 1.1 初始化 1.2 获取星期 1.3 更改格式 1.4 定时器超时函数 1.5 …

泛微基于华为仓颉编程语言开发公文交换系统 推动办公软件全面国产化

2024年6月21日下午&#xff0c;华为终端BG软件部总裁龚体先生在华为开发者大会主题演讲《鸿蒙原生应用&#xff0c;全新出发&#xff01;》中向全球开发者介绍了华为自研仓颉编程语言&#xff0c;并发布了HarmonyOS NEXT仓颉语言开发者预览版。这是华为首次公开发布仓颉编程语言…

比实物资产更重要的软硬件资产管理系统你了解吗?

“运筹帷幄之中&#xff0c;决胜千里之外。” 此言非但道出了战略谋划的重要性&#xff0c;亦在今日之商业世界&#xff0c;隐喻了信息管理对于企业竞争力的深远影响。 在数字化浪潮席卷全球的今天&#xff0c;企业的资产已不仅仅局限于厂房、设备、库存等实物形态&#xff0…

Console口密码又忘了?这样操作不尴尬

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 下午好&#xff0c;我的网工朋友。 在日常的网络管理和维护工作中&#xff0c;Console端口是技术人员访问网络设备&#xff08;如路由器、交换机…

简单步骤获取IP地址SSL 证书

在网络安全中&#xff0c;SSL证书在保护用户浏览器和Web服务器之间交换的敏感信息方面发挥着至关重要的作用。 但是&#xff0c;如果您不仅想保护域名&#xff0c;还想保护特定的IP地址&#xff0c;该怎么办&#xff1f;您可以为IP地址获取SSL证书吗&#xff1f; 简短的回答是…

IDEA 的全局搜索快捷键冲突

系统&#xff1a;MacOS 在IDEA中操作全局搜索&#xff1a;commandshiftF&#xff0c;会弹出来IDEA自己的搜搜框&#xff0c;还有一个访达的搜索框。 取消系统的默认搜索&#xff1a; 【系统设置-辅助功能-键盘-键盘设置-键盘快捷键】 【服务》搜索&#xff1a;取消勾选 聚焦…

掌握 Vue 3 的 <script setup>:高效开发的必备技巧

<script setup> 是 Vue 3 引入的一种新的 <script> 标记的用法&#xff0c;其本质是一个语法糖。它极大简化了单文件组件&#xff08;SFC&#xff09;的开发体验&#xff0c;目的是让代码更简洁、易读&#xff0c;同时减少模板和逻辑之间的重复。 1. 基本用法 &l…

Issue with OpenAI API key while using it in Windows

题意&#xff1a;“在 Windows 上使用 OpenAI API 密钥时遇到的问题” 问题背景&#xff1a; I have to fine-tune the OpenAI model on my custom dataset. I have created the dataset in jsonl format. I use the following commands on windows command line: “我需要在…

docker 安装 oracle11g

#创建oracle11g docker run -d --name myoracle11g -p 1522:1521 akaiot/oracle_11g #登录到oracle,要先docker ps 查看具体的docker id docker exec -it 22222222 bash su root 密码&#xff1a;helowin # 设置环境变量 vi /etc/profile export ORACLE_HOME/home/oracle/ap…

谷粒商城实战笔记-236~238-商城业务-购物车-环境搭建

文章目录 一&#xff0c;236-商城业务-购物车-环境搭建二&#xff0c;237-商城业务-购物车-数据模型分析三&#xff0c;238-商城业务-购物车-VO编写 一&#xff0c;236-商城业务-购物车-环境搭建 这一节的主要内容&#xff1a; ①创建购物车模块②上传静态资源到nginx③复制静…

二分+数学,CF 689C - Mike and Chocolate Thieves

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 689C - Mike and Chocolate Thieves 二、解题报告 1、思路分析 考虑一个…

钥匙失效、门卡死?看如何用电脑远程解救作业

不少人都在自己的电脑上安排了远程控制软件&#xff0c;以便在紧急情况下可以相互远程操作。原本这样的设置只是为了应对偶尔的加班需求&#xff0c;没想到今天它发挥了意想不到的作用。 就在刚才&#xff0c;一阵突如其来的狂风“咣”地一声将门牢牢锁死&#xff0c;钥匙也无法…

CeresPCL 最小二乘插值(曲线拟合)

一、简介 在多项式插值时,当数据点个数较多时,插值会导致多项式曲线阶数过高,带来不稳定因素。因此我们可以通过固定幂基函数的最高次数 m(m < n),来对我们要拟合的曲线进行降阶。之前的函数形式就可以变为: 既然是最小二乘问题,那么就仍然可以使用Ceres来进行求解。 …

禁止浏览器默认填充密码 vue

禁止浏览器默认填充密码会和我的样式冲突 所以禁止 第一种&#xff1a; 通过给表单元素添加 autocomplete"off" 属性&#xff0c; 可以防止浏览器自动填充表单中的账号和密码。可以在 input 标签或整个 form 标签上使用&#xff1a; <template><a-form&g…

基于Springboot2 + vue3酒店客房预订管理系统

笔者花大量时间设计整理出来的一套预订系统&#xff0c;【按照商业软件的标准此程序还有很多不足之处&#xff0c;需要大力改进】。本平台采用B/S结构&#xff0c;后端采用主流的JAVA Springboot框架进行开发&#xff0c;前端采用主流的Vue3 &#xff0c;vite,pinia等技术进行…