C语言pthread库的线程休眠和唤醒的案例

一、代码如下

#include<stdio.h>

#include<pthread.h>

 

// 定义独占锁 
pthread_mutex_t mutex;

 

// 定义条件信号对象
pthread_cond_t condition;


 // 初始化函数
void init(){
    
    int code = pthread_mutex_init(&mutex, NULL);
    printf("共享锁初始化状态:%d \n", code);
    
    
    code = pthread_cond_init(&condition, NULL); 
    printf("共享条件变量初始化状态:%d \n", code);
}

 

// 线程的逻辑

void* run(void* arg){
    printf("进入休眠状态.\n");

 

    // 加锁
    pthread_mutex_lock(&mutex);
    
    // 休眠
    pthread_cond_wait(&condition, &mutex);
    
    printf("被唤醒,退出。\n"); 

 

    // 释放锁
    pthread_mutex_unlock(&mutex);
}


// 测试线程休眠和唤醒 
int main(){
    init();
    
    pthread_t pid;
  

    // 创建一个线程运行 
    pthread_create(&pid, NULL, run, NULL); 
    

    // 获得排他锁
    pthread_mutex_lock(&mutex);
    
    printf("请输入一个字母,唤醒线程:\n");
    getchar();
    
    // 唤醒那些处在休眠的线程
    pthread_cond_signal(&condition);
 

    // 释放排他锁
    pthread_mutex_unlock(&mutex);
    
    getchar();
    // pthread_join(pid, NULL);
    
    return 0;
}

 

说明:

   1、线程只有获得锁才能休眠;

   2、线程休眠后排他锁就释放了;

   3、处在休眠的线程可以被其他线程获得排他锁后唤醒;

 

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

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

相关文章

人脸照片比对 API 接口如何对接?

随着数字化程度加深&#xff0c;身份验证的重要性也日益凸显&#xff0c;它成为保障个人信息安全、维护交易秩序的关键环节。人脸照片比对 API 接口作为连接人脸比对技术与各类应用的桥梁&#xff0c;正发挥着越来越重要的作用&#xff0c;成为众多企业和开发者实现高效、安全身…

java学习笔记9——常用类

字符串相关的类&#xff1a; String 指向同一个地址可才相等 注意这个地方&#xff0c;两个person对象的name实际上指向的是同一个字符串常量池&#xff08;Tom&#xff09; String常用方法 总结&#xff1a; 1.string类的理解(以JDK8为例说明) 1.1 类的声明 public final cl…

Day 09

文章目录 指针数组指针和函数技术名词解释技术细节课堂笔记 指针数组 #include<stdio.h> int main() {int a[3] {0,1,2};//指针数组&#xff0c;它是数组&#xff0c;每个元素都是指针int *p[3];p[0] &a[0];p[0] a;p[1] &a[1];p[1] a1;p[2] &a[2];p[…

Nginx — Nginx安装证书模块(配置HTTPS和TCPS)

一、安装和编译证书模块 [rootmaster nginx]# wget https://nginx.org/download/nginx-1.25.3.tar.gz [rootmaster nginx]# tar -zxvf nginx-1.25.3.tar.gz [rootmaster nginx]# cd nginx-1.25.3 [rootmaster nginx]# ./configure --prefix/usr/local/nginx --with-http_stub_…

计算机网络 用deepseek帮助整理的复习资料(一)

### 计算机网络基础知识整理 --- #### **一、网络类型** 1. **局域网 (LAN)** - **定义**&#xff1a;覆盖小范围&#xff08;如家庭、教室、公司&#xff09;。 - **特点**&#xff1a;高带宽、低延迟&#xff0c;设备通过交换机互联。 - **示例**&#xff1…

Linux SCP传输文件免密配置

文章目录 Linux SCP传输文件免密配置生成SSH密钥对将公钥复制到远程服务器测试SSH连接使用SCP免密传输文件可选配置带密码的秘钥连接处理使用 ssh-agent进行缓存管理&#xff08;该方式只能确保同一个回话中&#xff0c;多次传输只输一次密码&#xff09;使用 keychain&#xf…

数字电子技术基础(三十六)——利用Multisim软件实现3线-8线译码器

目录 1 手动方式实现3线-8线译码器 2 使用字选择器实现3线-8线译码器 现在尝试利用Multisim软件来实现3线-8线译码器。本实验目的是验证74LS138的基本功能&#xff0c;简单来说就是“N中选1”。 实验设计&#xff1a; &#xff08;1&#xff09;使能信号&#xff1a;时&am…

wait和notify : 避免线程饿死(以及votile内存可见性和指令重排序问题)

各位看官&#xff0c;大家早安午安晚安呀~~~ 如果您觉得这篇文章对您有帮助的话 欢迎您一键三连&#xff0c;小编尽全力做到更好 欢迎您分享给更多人哦 今天我们来学习&#xff1a;wait和notify : 避免线程饿死&#xff08;以及votile内存可见性和指令重排序问题&#xff09; …

HarmonyOS 介绍

HarmonyOS简介 随着万物互联时代的开启&#xff0c;应用的设备底座将从几十亿手机扩展到数百亿IoT设备。全新的全场景设备体验&#xff0c;正深入改变消费者的使用习惯。 同时应用开发者也面临设备底座从手机单设备到全场景多设备的转变&#xff0c;全场景多设备的全新底座&am…

【视觉提示学习】3.28阅读随想

2109.01134 CoOp通过可学习的向量来建模提示的上下文词汇&#xff0c;这些向量可以用随机值或预训练的词嵌入进行初始化&#xff08;见图2&#xff09;。我们提供了两种实现方式&#xff0c;以处理不同性质的任务&#xff1a;一种是基于统一上下文&#xff08;unified context…

计算机求职面试中高频出现的经典题目分类整理

以下为计算机求职面试中高频出现的经典题目分类整理&#xff0c;涵盖技术核心与深度考察方向&#xff0c;答案要点已附解析思路&#xff1a; 一、数据结构与算法 链表操作 题目&#xff1a;反转链表&#xff08;迭代/递归实现&#xff09;考察点&#xff1a;指针操作、递归思维…

uniapp选择文件使用formData格式提交数据

1. Vue实现 在vue项目中,我们有个文件,和一些其他字段数据需要提交的时候,我们都是使用axios 设置请求头中的Content-Type: multipart/form-data,然后new FormData的方式来进行提交。方式如下: const sendRequest = () => {const formData = new FormData()formData…

BeanDefinition和Beanfactory实现一个简单的bean容器

目录 什么是 Springbean 容器 设计思路 图解 参考文章 开源地址 BeanDefinition 类 BeanFactory 类 测试类 什么是 Springbean 容器 Spring 包含并管理应用对象的配置和生命周期&#xff0c;在这个意义上它是一种用于承载对象的容器&#xff0c;你可以配置你的每个 Bea…

AI Agent开发大全第十四课-零售智能导购智能体的RAG开发理论部分

开篇 经过前面的一些课程,我们手上已经积累了各种LLM的API调用、向量库的建立和使用、embedding算法的意义和基本使用。 这已经为我们具备了开发一个基本的问答类RAG的开发必需要素了。下面我们会来讲一个基本问答类场景的RAG,零售中的“智能导购”场景。 智能导购 大家先…

向字符串添加空格

给你一个下标从 0 开始的字符串 s &#xff0c;以及一个下标从 0 开始的整数数组 spaces 。 数组 spaces 描述原字符串中需要添加空格的下标。每个空格都应该插入到给定索引处的字符值 之前 。 例如&#xff0c;s "EnjoyYourCoffee" 且 spaces [5, 9] &#xff0…

百人会上的蔚小理与「来的刚刚好」的雷军

这就是2025百人会上的蔚小理&#xff0c;努力的李斌、宣扬飞行汽车的何小鹏与大讲开源的李想。那么小米汽车的模式是什么呢&#xff1f;站在蔚小理的肩上。 这就是2025百人会上的蔚小理&#xff0c;努力的李斌、宣扬飞行汽车的何小鹏与大讲开源的李想。那么小米汽车的模式是什么…

解锁Nginx路由器匹配规则

引言 Nginx 无疑是一款备受瞩目的明星产品。它以其高性能、高可靠性以及出色的并发处理能力&#xff0c;在众多 Web 服务器和反向代理服务器中脱颖而出 &#xff0c;广泛应用于各类网站和应用程序中。据统计&#xff0c;超过 30% 的网站都在使用 Nginx 作为其 Web 服务器&…

传统策略梯度方法的弊端与PPO的改进:稳定性与样本效率的提升

为什么传统策略梯度方法&#xff08;如REINFORCE算法&#xff09;在训练过程中存在不稳定性和样本效率低下的问题 1. 传统策略梯度方法的基本公式 传统策略梯度方法的目标是最大化累积奖励的期望值。具体来说&#xff0c;优化目标可以表示为&#xff1a; max ⁡ θ J ( θ )…

Qwt入门

Qwt(Qt Widgets for Technical Applications)是一个用于科学、工程和技术应用的 Qt 控件库,提供曲线图、仪表盘、刻度尺等专业可视化组件。 1. 安装与配置 1.1 安装方式 源码编译(推荐): git clone https://github.com/qwt/qwt.git cd qwt qmake qwt.pro # 生成 Makef…

软考《信息系统运行管理员》- 6.1 信息系统安全概述

信息系统安全的概念 信息系统安全是指保障计算机及其相关设备、设施(含网络)的安全&#xff0c;运行环境的安全&#xff0c; 信息的安全&#xff0c;实现信息系统的正常运行。 信息系统安全包括实体安全、运行安全、信息安全和 人员安全等几个部分。 影响信息系统安全的因素…