C语言pthread库的互斥锁使用案例

一、函数约定

1、初始化锁

int    pthread_mutex_init(pthread_mutex_t*   m, const pthread_mutexattr_t*   attr)

 

2、加锁

int    pthread_mutex_lock(pthread_mutex_t*   m);

 

3、解锁

int   pthread_mutex_unlock(pthread_mutex_t*  m);
 

4、销毁

int     pthread_mutex_destroy(pthread_mutex_t*  m);
 

 

二、代码如下

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


// 定义结构体变量,代表一个互斥锁 
pthread_mutex_t mutex;

 

// 线程函数,描述线程的逻辑
void* thread_func(void* arg)
{
    // 加锁
    pthread_mutex_lock(&mutex); 
    
    int* total = (int*)arg;
    
    int k;
    for(k = 1; k <= 1000; k++){
        *total = *total + 1;
    }
    
    // 执行一些需要互斥访问的操作
    // 转账,修改共享数据 
    
    // update("id", "新值");
    
    // 解锁
    pthread_mutex_unlock(&mutex); 
    
    printf("线程%d计算完毕\n", pthread_self());
    return NULL;
}


// pthread库的加锁和解锁操作。 
int main()
{

   // 共享数据
    int total = 0;
    
    // 初始化互斥锁
    pthread_mutex_init(&mutex, NULL); 
    
    pthread_t t1;
    pthread_t t2;
    
    // 创建和启动线程
    // 同时建立两个 
    pthread_create(&t1, NULL, thread_func, &total);
    pthread_create(&t2, NULL, thread_func, &total);
    
    
    // 等待子线程结束
    pthread_join(t1, NULL);
    pthread_join(t2, NULL); 
    
    printf("计算结果:%d \n", total);
    
    // 销毁互斥锁
    pthread_mutex_destroy(&mutex);
    
    return 0;
}

 

 

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

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

相关文章

随机2级域名引导页HTML源码

源码介绍 随机2级域名引导页HTML源码,每次点进去都随机一个域名前缀。 修改跳转域名在 350 行代码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行 效果预览 源码免费获取 随机2级域名引导页…

NQA 网络质量分析协议

协议信息 网络质量分析协议&#xff0c;支持 icmp 等协议测试 配置实现 华为 创建 ICMP 测试实例 NQA 与静态路由联动 ​ip route-static 10.1.1.0 24 10.1.2.1 track nqa admin test1​​

Nginx — nginx.pid打开失败及失效的解决方案

1、场景一&#xff1a;nginx.pid文件或者目录不存在 1.1、报错详情 [rootmaster conf]# ../sbin/nginx -s reload nginx: [error] open() "/var/run/nginx/nginx.pid" failed (2: No such file or directory) #nginx.pid文件或目录不存在。 原因&#xff1a; 1、文件…

Gitee批量删除仓库

Gitee批量删除仓库 文章目录 Gitee批量删除仓库生成一个GiteeToken通过Python调用Gitee API参考文档 生成一个GiteeToken 右上角下拉->设置->安全设置->私人令牌->生成新令牌&#xff0c;注意将令牌保存&#xff08;只会出现一次&#xff09; 通过Python调用Gite…

AireOS WLC安装License报错

1.概述 本文主要记录在AireOS的WLC上安装License错误的情况。License的类型也是传统的License&#xff0c;因为设备的型号已经EOL&#xff0c;相关的资料应该较少&#xff0c;这里进行可能问题的记录。 2.适用场景 型号&#xff1a;WLC2500&#xff0c;WLC5508 License类型…

利用 Excel 函数随机抽取(附示例)

RANDARRAY 是 Excel 365 和 Excel 2021 引入的一个函数&#xff0c;用于生成一个随机数数组。它的语法如下&#xff1a; RANDARRAY([rows], [columns], [min], [max], [whole_number])参数详解 rows&#xff08;可选&#xff09; 要生成的行数&#xff08;默认值为 1&#xff…

Python:爬虫概念与分类

网络请求&#xff1a; https://www.baidu.com url——统一资源定位符 请求过程&#xff1a; 客户端&#xff0c;指web浏览器向服务器发送请求 请求&#xff1a;请求网址(request url)&#xff1b;请求方法(request methods)&#xff1b;请求头(request header)&…

【今日半导体行业分析】2025年3月30日

今日探针卡行业分析&#xff1a;把握机遇&#xff0c;应对挑战 一、引言 在半导体产业的精密制造流程中&#xff0c;探针卡作为晶圆测试环节的核心设备&#xff0c;犹如一颗精密的 “心脏”&#xff0c;承担着芯片封装前电学性能测试与筛选的重任。其性能的优劣直接关系到芯片…

HO与OH差异之Navigation三

在上一篇内容中我们介绍了HO与OH差异之Navigator&#xff0c;我们也了解了Navigator的基本概念和大致了解了一下他的基础用法&#xff0c;既然谈到差异肯定就不止这两种差异&#xff0c;今天就让我们来了解第三种差异NavRouter&#xff0c;其中在HO中我们并没有这种路由方式但是…

Java 程序员面试题:从基础到高阶的深度解析

引言 Java 作为全球最流行的编程语言之一&#xff0c;其面试题不仅考察候选人的编程能力&#xff0c;更关注对底层原理和架构设计的理解。本文将系统梳理 Java 面试中的高频考点&#xff0c;结合代码示例与原理分析&#xff0c;助您从容应对技术面试。 一、Java 基础语法与核…

Python操作Excel文件的11种方法

Python操作Excel文件的11种方法 pandas&#xff1a;功能强大&#xff0c;支持数据清洗、转换和分析&#xff0c;适用于数据分析和处理任务。 openpyxl&#xff1a;专注于 .xlsx 文件格式&#xff0c;提供细粒度的操作&#xff0c;适用于需要对 Excel 文件进行细粒度操作的场景…

ZGC初步了解

ZGC ZGC和G1&#xff0c;CMS一样都是一种垃圾回收器。那其实G1已经很不错了 为什么还需要ZGC呢 ZGC&#xff08;The Z Garbage Collector&#xff09;是JDK 11中推出的一款低延迟垃圾回收器&#xff0c;它的设计目标包括&#xff1a; 停顿时间不超过10ms&#xff1b; 停顿时…

Tof 深度相机原理

深度相机(TOF)的工作原理_tof相机原理-CSDN博客 深度剖析 ToF 技术&#xff1a;原理、优劣、数据纠错与工业应用全解析_tof技术-CSDN博客 飞行时间技术TOF_tof计算公式-CSDN博客 深度相机&#xff08;二&#xff09;——飞行时间&#xff08;TOF&#xff09;_飞行时间技术-C…

c++-函数增强

一、编译器对函数名的处理 1. C与C的差异 C编译器&#xff1a;保留原始函数名&#xff0c;无额外处理。例如&#xff1a; int add(int a, int b) { return a b; } 在汇编代码中仍为add。 C编译器&#xff1a;通过name mangling&#xff08;名称修饰&#xff09;生成唯一函数…

跟着StatQuest学知识08-RNN与LSTM

一、RNN &#xff08;一&#xff09;简介 整个过程权重和偏置共享。 &#xff08;二&#xff09;梯度爆炸问题 在这个例子中w2大于1&#xff0c;会出现梯度爆炸问题。 当我们循环的次数越来越多的时候&#xff0c;这个巨大的数字会进入某些梯度&#xff0c;步长就会大幅增加&…

HarmonyOS 之 @Require 装饰器自学指南

在 HarmonyOS 应用开发工作中&#xff0c;我频繁碰到组件初始化传参校验的难题。在复杂的组件嵌套里&#xff0c;要是无法确保必要参数在构造时准确传入&#xff0c;就极易引发运行时错误&#xff0c;而且排查起来费时费力。一次偶然的机会&#xff0c;我接触到了 Require 装饰…

CDN节点对网络安全扫描的影响:挑战与应对策略

引言 在当今互联网环境中&#xff0c;内容分发网络(CDN)已成为提升网站性能和用户体验的关键技术。然而&#xff0c;CDN的广泛应用也为网络安全扫描带来了新的挑战。本文将深入探讨CDN节点如何影响各类安全扫描工作&#xff0c;分析由此产生的安全风险&#xff0c;并提供有效的…

【Git多分支使用教程】

Git多分支使用教程 Git多分支使用手册目录多分支只拉取一个多分支拉取指定几个步骤 1&#xff1a;克隆第一个分支步骤 2&#xff1a;获取其他分支 常见问题与解决方法1. 错误&#xff1a;origin/分支名 is not a commit2. 分支名称冲突3. --single-branch 限制 总结 Git多分支使…

【身份安全】OAuth 2.0工作原理(一)

目录 OAuth 授权框架一、OAuth 角色二、协议流程三、应用注册&#xff08;Application Registration&#xff09;用户 ID&#xff08;Client ID&#xff09; 和 用户密码&#xff08;Client Secret&#xff09; 四、权限授予1、授权码链接2、用户授权申请3、应用程序接收授权码…

大疆上云api直播功能如何实现

概述 流媒体服务器作为直播画面的中转站,它接收推流端的相机画面,同时拉流端找它获取相机的画面。整个流程如下: 在流媒体服务器上创建流媒体应用(app),一个流媒体服务器上面可以创建多个流媒体应用约定推拉流的地址。假设流媒体服务器工作在1935端口上面,假设创建的流…