Linux系统编程:线程 3:信号量

news2024/11/24 22:37:48

1.信号量的概念

信号量是线程间有顺序的协调工作,信号量 (个数) 反映的是资源的数量,信号量起到锁的效果;

2.信号量的机制

(1)信号量描述可使用资源的个数;

(2)p操作,表示使用这个资源,资源数量-1;

        p操作逻辑:尝试获取资源,有资源可用,直接使用,资源个数-1,如果没有资源可用,此时等待 

(3)v操作,表示使用这个资源,资源数量+1;

        v操作逻辑:表示产生这个资源,资源个数+ 1

写线程——写资源 buf [1024]
        可以写数据的条件 
        1.开始时 ,buf空的,开始写入
        2.写线程写完了,资源-1

读线程——读资源 
       1.写线程结束,读线程开始

        2.读线程读完了,资源+1;

7e68b10e11f04b988d0ae1c87b16227e.png

3.信号量使用

(1)定义信号量(全局区定义),如:sem_t sem_w   (写入),sem_t sem_r   (读取),头文件:#include <semaphore.h>

(2)初始化信号量(主函数开始处初始化):sem_init (&sem_w, 0, 1),sem_init (&sem_r, 0, 0)

sem_init的第二个参数表示信号量是在线程间使用还是在进程间使用,为0表示在线程间使用,非0表示在进程间使用,第三个参数表示资源,1表示有一个资源可用,0表示没有资源;

(3)信号量使用(线程中使用):sem_wait表示p操作,sem_post表示v操作;

线程1中sem_wait (&sem_w),sem_post (&sem_r),表示先进行p操作,sem_w资源-1,然后进行v操作,sem_r资源+1;

线程2中sem_wait (&sem_r),sem_post (&sem_w),表示先进行p操作,sem_r资源-1,然后进行v操作,sem_w资源+1;

(4)信号量销毁(主函数结束前销毁):sem_destroy(&sem_w), sem_destroy(&sem_r);

定义和使用信号量(全局区和线程内):

c9882c466d71428bbc282c55368daac3.png

初始化和销毁信号量(主函数):

94ef17d95a7d4eda8064c1edc878852c.png

运行结果:

7b2edfa8cd5343ff87e9bc82e7aecfaa.png

 

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

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

相关文章

第二证券:全球首款双人互动剧上线 暑期游戏持续升温

全球首款双人互动剧上线 全球首款双人互动剧《谍影成双》现已在全球游戏渠道Steam、微信小程序、QQ小程序同步上线。根据上海影视乐园官方大众号&#xff0c;该作是2023年度爆款互动剧《飞越13号房》制造团队互影科技的全新著作。 2023年被称为互动剧的元年&#xff0c;“互动…

python学习day15地图、柱状图

地图、柱状图 地图示例 柱状图XY轴反转小结 时间线柱状图自动播放小结 动态柱状图sort排序练习动态柱状图 地图 from pyecharts.charts import Map mapMap() data[(北京市,999),(上海市,133),(河南省,123),(西藏自治区,123),(吉林省,12), ]map.add("地图",data,"…

ElasticSearch数据建模

文章目录 如何处理关联关系避免过多字段避免正则/通配符/前缀查询避免空值引起的聚合不准为索引的Mapping加入Meta 信息 如何处理关联关系 Object: 优先考虑反范式&#xff08;Denormalization&#xff09; Nested: 当数据包含多数值对象&#xff0c;同时有查询需求 Child/Pa…

SAP BAPI for Tcode SM12

注意&#xff1a;ENQUE_READ 和 ENQUE_READ2 的table ENQ是两个不同的结构 想通过 ENQUE_READ2 读取结构然后去删除 ENQUE_DELETE的 要注意不能直接用 要用 ENQUE_CONVERT_SEQG7_TO_SEQG3 进行转换 FUNCTION ENQUE_CONVERT_SEQG7_TO_SEQG3. *"-----------------------…

[000-01-030].第2节 :Zookeeper本地安装

1.Zookeeper下载地址 1.Zookeeper官网地址 2.会显示Zookeeper的一些版本 2.Zookeeper本地模式安装&#xff1a; 2.1.Zookeeper安装前准备 1.在Centos7虚拟机中安装jdk8 2.2.Zookeeper安装过程&#xff1a; 1.下载zookeeper压缩版本&#xff0c;解压放在opt/moduel目录下…

为啥90%设计师素材整理文件夹都是无效的?

大家好&#xff0c;今天我想和大家分享一下我在使用千鹿设计助手软件之前的图片管理经历&#xff0c;以及千鹿给我带来的巨大变化。 正文&#xff1a; 大家好&#xff0c;今天我想和大家分享一下我在使用千鹿软件之前的图片管理经历&#xff0c;以及千鹿给我带来的巨大变化。 …

netCDF文件预览(nc格式)

1.工具下载 软件下载&#xff1a;https://download.csdn.net/download/qq_34321590/89645482 2.java11环境安装 需要安装java11以上版本 安装包下载&#xff1a; https://download.csdn.net/download/qq_34321590/89645487 安装步骤&#xff1a; 1.解压 2.配置环境变量 在…

针对老年人的景区订票系统

TOC springboot303针对老年人的景区订票系统 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;…

RK3588 RTL8125BG调试

RTL8125B是一款PCIE转RJ45的网卡控制器芯片&#xff0c;在底层调试时只需配置PCIE即可 diff --git a/arch/arm64/boot/dts/rockchip/rk3588-nvr-demo.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-nvr-demo.dtsi index 798359eaf061..d8a7a43cdfa0 100755 --- a/arch/arm64/bo…

【学习笔记】Day 14

一、进度概述 1、《地震勘探原理》第七章 二、详情 地震波动力学是相对于运动学而言的。运动学主要研究波的传播规律&#xff0c;其主要特征是分析、研究波的传播路径。传播速度。旅行时间等。地震波动力学则主要从能量的角度研究地震波的特征&#xff0c;如波的振幅、波形、频…

比eagle还好用?设计师如何做好素材管理|设计源文件管理|Flux文生图|快搜索|高效应用

用Eagle的设计师朋友们&#xff0c;有没有遇到这样的问题&#xff1f;像PS工程文件必须要保存后&#xff0c;才能打标签。需要修改的时候&#xff0c;还要打开Eagle搜索再拖进来&#xff0c;属实有点麻烦。不过我觉得Eagle让我最难受的还是&#xff0c;它的素材有专门的文件结构…

如何利用R语言学习机器学习?

机器学习是近年来非常热门的一个学科&#xff0c;R 语言经过一段时间的发展也逐渐成为主流的编程语言之一。 机器学习是人工智能的一个分支&#xff0c;旨在通过构建和训练计算机算法和模型&#xff0c;使计算机能够 从数据中学习并自主进行决策和预测。传统的计算机程序是由开…

C++快速理解之泛型编程

1、引入 #include <iostream>using namespace std;int add(int a, int b) {return a b; }float add(float x, float y) {return x y; }int main() {int result add(3, 4);cout << "result " << result << endl;float result2 add(3.5…

智能分班结果自动发布系统

新学期&#xff0c;校园里又将迎来一批充满活力的新生。对于老师们来说&#xff0c;除了准备教学计划和课程内容&#xff0c;还有一项看似简单却颇为繁琐的任务——发布分班。传统的分班信息发布方式&#xff0c;通常是老师们一个个私信给学生家长&#xff0c;家长们收到信息后…

【图像特效系列】图像滤镜特效的实践 | 包含代码和效果图

目录 一 滤镜特效 1 代码 2 效果图 图像特效系列主要是对输入的图像进行处理,生成指定特效效果的图片。图像素描特效会将图像的边界都凸显出来;图像怀旧特效是指图像经历岁月的昏暗效果;图像光照特效是指图像存在一个类似于灯光的光晕特效,图像像素值围绕光照中心点呈圆…

InternLM2_PracticalCamp_L1_rask4_llamaindex+Internlm2 RAG实践

1. 前置知识 正式介绍检索增强生成&#xff08;Retrieval Augmented Generation&#xff0c;RAG&#xff09;技术以前&#xff0c;大家不妨想想为什么会出现这样一个技术。 给模型注入新知识的方式&#xff0c;可以简单分为两种方式&#xff0c;一种是内部的&#xff0c;即更新…

DNS查询过程与原理

目录 DNS1. DNS 是什么2. DNS 服务器3. 使用dig显示查询过程4. 域名的逐级查询5. 简述DNS解析www.baidu.com的过程 参考 DNS 1. DNS 是什么 DNS &#xff08;Domain Name System 的缩写&#xff09;是域名解析器&#xff0c;根据域名查出IP地址 2. DNS 服务器 DNS 服务器是一…

Leon黎明广州演唱会2024重磅官宣,10月26日倾情开唱!

径自奔流的时光中&#xff0c;总有些声音拥有超越时间的力量&#xff0c;弥合着世代更迭的图景&#xff0c;在一代又一代人的心中闪烁不息。在熠熠生辉的星河中&#xff0c;垂钓破晓时分的曙光&#xff0c;总有星辰会指引着我们相遇。 当千禧年的风吹过耳畔&#xff0c;记忆深…

在 ToolStrip 控件中使用工具提示

可以通过将控件的 ShowItemToolTips 属性设置为 true 来为所需的 ToolStrip 控件显示 ToolTip。 显示工具提示 将控件的 ShowItemToolTips 属性设置为 true。 ToolStrip.ShowItemToolTips 的默认值为 true&#xff0c;MenuStrip.ShowItemToolTips 和 StatusStrip.ShowItemTool…

基于HTML语言的环保网站的设计与实现

TOC springboot318基于HTML语言的环保网站的设计与实现 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&a…