Linux c开发线程锁和条件变量使用

#include <pthread.h>
#include <stdio.h>
#include <unistd.h>pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;void* thread_function(void* arg) {printf("线程等待唤醒,锁定互斥量...\n");pthread_mutex_lock(&mutex);printf("线程等待在条件变量上...,这个时候会阻塞这里,且释放锁\n");pthread_cond_wait(&cond, &mutex); // 线程被唤醒后继续执行printf("线程被唤醒!\n");pthread_mutex_unlock(&mutex);return NULL;
}int main() {pthread_t thread_id;// 创建线程pthread_create(&thread_id, NULL, &thread_function, NULL);// 睡眠一段时间,以便让线程先运行并等待条件变量sleep(5);// 唤醒等待在条件变量上的线程printf("主线程发送唤醒信号...\n");pthread_mutex_lock(&mutex);printf("主线程发送唤醒信号2...\n");pthread_cond_signal(&cond);printf("主线程发送唤醒信号3...\n");pthread_mutex_unlock(&mutex);        //上面加锁,这里就必须配套解锁,否则即便pthread_cond_wait取不到锁还是卡在那printf("主线程发送唤醒信号4...\n"); // 等待子线程结束printf("等待子线程结束 1...\n");pthread_join(thread_id, NULL);printf("等待子线程结束 2...\n");return 0;
}

makefile执行 :gcc  optThread.c -lpthread -o  opt  


执行结果


 

fr:徐海涛(hunkxu)

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

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

相关文章

代码随想录算法训练营第十七天 | 110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和

[LeetCode] 110. 平衡二叉树 [LeetCode] 110. 平衡二叉树 文章解释 [LeetCode] 110. 平衡二叉树 视频解释 给定一个二叉树&#xff0c;判断它是否是 平衡二叉树 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;true示例 2&#xff1a; 输…

HTTP 响应分割漏洞

HTTP 响应分割漏洞 1.漏洞概述2.漏洞案例 1.漏洞概述 HTTP 响应拆分发生在以下情况&#xff1a; 数据通过不受信任的来源&#xff08;最常见的是 HTTP 请求&#xff09;进入 Web 应用程序。该数据包含在发送给 Web 用户的 HTTP 响应标头中&#xff0c;且未经过恶意字符验证。…

CSS常用的两种定位方式

在CSS中&#xff0c;absolute 和 relative 是两种常用的定位方式&#xff0c;分别通过 position 属性进行设置。它们用于控制元素在页面中的位置。理解这两种定位方式对于布局和设计响应式页面非常重要。 position: relative 定义 relative 定位是相对自身原始位置进行偏移。…

Python 魂斗罗的音效和动漫效果

一、实现游戏音效 音效是游戏中不可或缺的一部分&#xff0c;它可以为游戏增添氛围和趣味性。在 Pygame 中&#xff0c;我们可以使用 pygame.mixer 模块来播放音效。下面是一个简单的示例代码&#xff0c;演示如何在游戏中播放音效&#xff1a; import pygamepygame.mixer.init…

windows平台vcpkg安装

1. 克隆vcpkg仓库 git clone https://github.com/microsoft/vcpkg 2.运行bootstrap-vcpkg.bat下载vcpkg.exe 3.运行验证 4.使用VCPKG安装OPENSSL 5.安装成功

VC++学习(1)——环境准备,参考文档等,初步入门VC++

目录 引出环境准备&#xff0c;参考文档第一讲 初步入门键盘按下的消息鼠标左键按下报错源码新建一个工程 总结 引出 VC学习&#xff08;1&#xff09;——环境准备&#xff0c;参考文档等&#xff0c;初步入门VC C是一门编程语言,他的语法标准和语言特性是全球统一的 VC是微…

计算机系统概述习题

选择题 电子计算机问世至今&#xff0c;新型计算机不断推陈出新&#xff0c;不管怎么更新&#xff0c;依然具有“存储程序”的特点&#xff0c;最早提出这种概念的是(B) A. 巴贝奇 B. 冯*诺伊曼 C. 帕斯卡 D. 贝尔 B下列描述中___是正确的。 A. 控制器能理解&#xff0c;解释…

中国主要城市房价指数数据集(2011-2024)

数据来源&#xff1a;东方财富网 时间跨度&#xff1a;2011年1月 - 2024年4月 数据范围&#xff1a;中国主要城市 包含指标&#xff1a; 日期、城市 新建商品住宅价格指数-同比 新建商品住宅价格指数-环比 新建商品住宅价格指数-定基 二手住宅价格指数-环比 二手住宅价格指…

Visual Studio 调试及快捷键

文章目录 原文连接环境一、调试器的基本使用1、更改执行流2、快速执行某一条代码断点设置条件断点查看内存信息查看调用堆栈查看寄存器信息设置监视断点调试二、快捷键一、窗口快捷键二、查找相关快捷键三、代码快捷键原文连接 【教程】visual studio debug 技巧总结 环境 一…

OpenCASCADE Draw模块TKDraw项目问题修改

1.问题 在调试Draw模块代码时&#xff0c;出现一个小问题&#xff0c;导致无法正常运行 如下&#xff1a; 2.代码跟踪 通过代码跟踪发现时一个数组越界问题&#xff0c;在此处添加了判断处理&#xff0c;程序可以正常调试

Golang使用HTTP框架zdpgo_resty实现文件下载

核心代码 代码解析&#xff1a; client.SetOutputDirectory("Downloads") 设置下载目录client.R().SetOutput("test.go").Get("http://127.0.0.1:3333/download 指定下载文件名并进行下载 // 设置输出目录路径&#xff0c;如果目录不存在&#xff…

数据结构顺序表实现通讯录

目录 1. 前言&#xff1a; 2.通讯录项目的创建 3. 通讯录的实现 3.1 通讯录的初始化 3.2 通讯录的销毁 3.3 通讯录添加数据 3.4 通讯录查找数据 3.5 通讯录展示数据 3.6 通讯录删除数据 3.7 通讯录修改数据 4. 通讯录完整代码 4.1 test.c 4.2 SeqList.h 4.3 SeqLis…

PostgreSQL学习笔记

PostgreSQL 基本概念和架构 PostgreSQL 是一个功能强大的开源对象关系数据库管理系统&#xff08;ORDBMS&#xff09;&#xff0c;其设计目标是遵循 SQL 标准&#xff0c;并提供丰富的功能&#xff0c;如复杂查询、外键、触发器、视图和事务处理。以下是 PostgreSQL 的基本概念…

数据结构(Java实现):ArrayList

目录 1.ArrayList简介2.ArrayList构造方法分析3.ArrayList的add方法以及扩容机制4.ArrayList常用方法5.ArrayList遍历6.ArrayList的缺陷 1.ArrayList简介 在集合框架中&#xff0c;ArrayList是一个普通的类&#xff0c;实现了List接口&#xff0c;具体框架图如下&#xff1a; …

编写一个llvm编译器插件,完成在store汇编指令前对内存合法性的check。

dds(iceoryx、fastdds等)中间件采用了共享内存&#xff0c;如果app内存越界将共享内存踩踏坏了&#xff0c;将会形成灾难。本插件可以检测到app是否在写共享内存&#xff0c;如果是&#xff0c;我们可以让app assert。从而提高dds的稳定性 插件效果&#xff1a; 插件源码&…

话题:如何让大模型变得更聪明?

随着人工智能&#xff08;AI&#xff09;技术的迅速发展&#xff0c;大模型&#xff08;如GPT-4、BERT、Transformer等&#xff09;在自然语言处理、图像识别和语音识别等领域取得了显著成果。然而&#xff0c;如何让大模型变得更聪明&#xff0c;进一步提升其性能和应用效果&a…

Netty: Netty中的组件

文章目录 一、EventLoop1、EventLoop2、EventLoopGroup&#xff08;1&#xff09;处理普通时间和定时任务&#xff08;2&#xff09;处理IO任务 二、Channel三、Future&Promise四、Handler&Pipeline五、ByteBuf 一、EventLoop 1、EventLoop EventLoop本质是一个单线程…

Jetbrain | IDEA的启动logo替换成可爱的vtuber-logo

看了这个&#xff0c;好可爱 【上Github热榜了&#xff01;当编程语言的Logo变得可爱起来~】 又看了这个 光速整活&#xff0c;强啊 看到很多人整IDEA的logo包括我自己&#xff0c;都不是特别方便的搞&#xff0c;我就直接把文件放在绑定资源里直接下吧 然后直接找到本体的安…

ios swift5 codable字典转模型,第三方库SmartCodable

文章目录 1.用第三方库SmartCodable, github地址2.使用示例 1.用第三方库SmartCodable, github地址 SmartCodable - github 2.使用示例 import Foundation import SmartCodablestruct CommonModel: SmartCodable {var message: String ""var success: Bool fals…

【深度学习】与【PyTorch实战】

目录 一、深度学习基础 1.1 神经网络简介 1.2 激活函数 1.3 损失函数 1.4 优化算法 二、PyTorch基础 2.1 PyTorch简介 2.2 张量操作 2.3 构建神经网络 2.4训练模型 2.5 模型评估 三、PyTorch实战 3.1 数据加载与预处理 3.2 模型定义与训练 3.3 模型评估与调优 3…