当前位置: 首页 > news >正文

linux的信号量的使用

1.信号量

在多线程情况下,线程要进入关键代码就得获取信号量(钥匙){sem_init(&sem, 0, 0);},没有信号量的情况下就一直等待sem_wait(&sem),只到别人把钥匙(sem_post(&sem))给你。

这个sem_wait(&sem)后面的就是房子,每当等到别人给了我钥匙(就是等到了sem_post),这个时候就可以进入房子,每进入一次当前的钥匙就没了,下次进入还得等钥匙!

简单解释一下:

2. sem_init(&sem, 0, 0);

这个是创建一把钥匙,钥匙名字为了sem。

  1. 0:表示这个信号量是在进程间共享的,如果是非0值,则表示信号量只在当前进程中有效。
  2. 0:表示信号量的初始值。

3.sem_wait(&sem)

这个函数会一直阻塞在那,直到别人释放钥匙(信号量),才能让代码往下执行。

4.sem_post(&sem);

这个就是把钥匙给一个别人

以下是一个代码demo

#include <pthread.h>
#include <semaphore.h>
#include <stdio.h>
#include <string.h>
#include<unistd.h>
sem_t sem;void* change_resource(void* resource) {char* msg = (char*)resource;while(1){sem_wait(&sem);strcat(msg, "a");printf("resource changed with value: %s\n", msg);}return NULL;
}int main() {int ret;pthread_t thread;char msg[100] = "Initial ";ret = sem_init(&sem, 0, 0);if (ret != 0) {perror("sem_init");return 1;}ret = pthread_create(&thread, NULL, change_resource, (void*)msg);if (ret != 0) {perror("pthread_create");return 1;}while (1) {sem_post(&sem);printf("Semaphore send sem\n");sleep(1);}return 0;
}

以下是程序运行的结果

相关文章:

linux的信号量的使用

1.信号量 在多线程情况下&#xff0c;线程要进入关键代码就得获取信号量&#xff08;钥匙&#xff09;{sem_init(&sem, 0, 0);}&#xff0c;没有信号量的情况下就一直等待sem_wait(&sem)&#xff0c;只到别人把钥匙&#xff08;sem_post(&sem)&#xff09;给你。 …...

C--贪吃蛇

前言 贪吃蛇游戏是一个耳熟能详的小游戏,本次我们讲解他的简单的实现,需要掌握基本的API知识(http://t.csdnimg.cn/uHH6y),简单的C语言知识和基本的数据结构链表 简单的准备工作 蛇的节点 在游戏运⾏的过程中&#xff0c;蛇每次吃⼀个⻝物&#xff0c;蛇的⾝体就会变⻓⼀节&a…...

element ui的确认提示框按钮样式修改

修改确认提示框的默认按钮样式&#xff0c;使用css强制修改 例&#xff1a; js代码&#xff1a; this.$confirm("您确定要删除吗&#xff1f;此操作无法撤销并且将永久删除所有数据。", "提示", { type: "warning", cancelButtonClass: "…...

【vue】keep-alive:true缓存导致页面数据不刷新

keep-alive生命周期钩子函数&#xff1a;activated、deactivated activated&#xff1a;页面第一次进入的时候&#xff0c;钩子触发的顺序是created->mounted->activated deactivated: 页面退出的时候会触发deactivated&#xff0c; 当再次前进或者后退的时候只触发acti…...

Golang — map的使用心得和底层原理

map作为一种基础的数据结构&#xff0c;在算法和项目中有着非常广泛的应用&#xff0c;以下是自己总结的map使用心得、实现原理、扩容机制和增删改查过程。 1.使用心得&#xff1a; 1.1 当map为nil和map为空时&#xff0c;增删改查操作时会出现的不同情况 我们可以发现&#…...

Oracle如何收缩减小表空间大小

比如我们发现一个表空间占用比较大&#xff0c;但是空闲空间很大&#xff0c;想要减小表空间占用大小。查看表空间的情况 发现BETEST表空间占用大&#xff0c;但是剩余大小比较大&#xff0c;可以减小存储占用。 如果我们想减小到100MB&#xff0c;那么就登录其用户执行&#…...

【爬虫】爬取股票历史K线数据写入数据库(三)

前几天有写过两篇&#xff1a; 【爬虫】爬取A股数据写入数据库&#xff08;二&#xff09; 【爬虫】爬取A股数据写入数据库&#xff08;一&#xff09; 现在继续完善&#xff0c;分析及爬取股票的历史K线数据通过ORM形式批量写入数据库。 2024/05&#xff0c;本文主要内容如下…...

文心一言指令

文心一言&#xff08;ERNIE Bot&#xff09;是百度公司开发的人工智能语言模型&#xff0c;它可以接收各种指令来执行不同的任务。以下是一些可能的指令示例&#xff1a; 知识问答&#xff1a; 指令&#xff1a;“请问什么是人工智能&#xff1f;”文心一言会回答关于人工智能…...

常用的命令技巧总结

java命令执行 如下编码网站&#xff1a; Runtime.exec Payload Generater | AresXs Blogjava.lang.Runtime.exec() Payload Workarounds - Jackson_Thttps://www.bugku.net/runtime-exec-payloads/ 手动编码操作 bash -c {echo,cGluZyAxMjcuMC4wLjE7ZWNobyAxID50ZXN0LnR4dA}|…...

T97燃脂咖啡招商模式,私域分销模式设计

t97燃脂咖啡招商模式&#xff0c;希柔T97微商模式&#xff0c;社交电商系统 ​坐标&#xff1a;厦门&#xff0c;我是易创客肖琳 深耕社交新零售行业10年&#xff0c;主要提供新零售系统工具及顶层商业模式设计、全案策划运营陪跑等。 低卡咖啡第一品牌“T97”&#xff0c;突然…...

触摸OpenNJet,感悟云原生

小程一言 云原生使得应用充分利用云计算、容器化和微服务架构等现代技术来构建和运行应用程序。 云原生技术的用处在于提高应用程序的可靠性、可伸缩性和灵活性&#xff0c;加快开发和部署速度&#xff0c;降低成本&#xff0c;提升整体的效率和竞争力。通过采用云原生技术&a…...

UE4 自定义shader获取灯光位置

UE4.26:How to get the direction of specific directional lights in custom node material? - #4 by Arkiras - Rendering - Epic Developer Community Forums 获取灯光位置的shader&#xff0c;应该是这个了...

机器学习(五) ----------决策树算法

目录 1 核心思想 2 决策树算法主要步骤 3 决策树算法的分类 3.1 ID3算法&#xff08;Iterative Dichotomiser 3&#xff09;&#xff1a; 3.1.1 基本步骤 3.1.2 原理 信息增益 3.1.3 注意事项 3.2 C4.5算法&#xff1a; 3.2.1. 信息增益率 计算公式 3.2.2. 构建决策…...

Redis的数据完全是存在内存中的吗?

是的&#xff0c;Redis的数据完全是存储在内存中的。这也是Redis能够提供非常高速的读写性能的主要原因&#xff0c;尤其适用于需要快速响应的应用场景。然而&#xff0c;虽然Redis将所有数据存储在内存中&#xff0c;但它也提供了持久化机制&#xff0c;可以将数据异步地保存到…...

Linux开发--Linux设备驱动核心

Author: cpu_codeDate: 2020-06-30 16:15:35LastEditTime: 2020-07-01 17:59:23FilePath: \md\Linux\6818_Linux驱动.mdGitee: https://gitee.com/cpu_codeCSDN: https://blog.csdn.net/qq_44226094 Linux设备驱动核心概念 Linux内核中断处理 Linux操作系统下同裸机程序一样…...

vue3引入vant完整步骤

在Vue 3中引入Vant&#xff08;一个基于Vue的移动端UI组件库&#xff09;的完整步骤通常包括以下几个部分&#xff1a; 安装Vue CLI&#xff08;如果你还没有安装的话&#xff09;&#xff1a; npm install -g vue/cli 创建一个新的Vue项目&#xff1a; 假设你希望项目名为my…...

C语言——文件缓冲区

一、用户缓冲区和系统缓冲区 缓冲区的概念确实可以分为多个层次&#xff0c;其中最常见的两个层次是用户缓冲区和系统缓冲区。 这里的用户缓冲区和系统缓冲区都包括输入输出缓冲区。 1、用户缓冲区&#xff08;User-space Buffer&#xff09; 用户缓冲区是指由用户程序&…...

如何快速检测原理图中的元器件与PLM系统的一致性,提高原理图设计准确性

背景介绍 保证原理图中的元器件来源于公司的PLM系统、ERP系统的&#xff0c;是输出有效BOM的根源&#xff0c;初始BOM的准确率&#xff0c;能大大降低ECN的数量&#xff0c;提高生产备料的时效&#xff0c;缩短采购周期。 然而&#xff0c;原理图设计过程中&#xff0c;由于…...

英特尔处理器排行

英特尔的处理器性能排行通常是根据其发布的不同代数和型号来划分的&#xff0c;以下是一些高性能的英特尔处理器&#xff1a; Intel 酷睿 i9 14900K&#xff1a;这是目前英特尔桌面平台中的旗舰处理器之一&#xff0c;提供了极高的性能&#xff0c;适合高端游戏和专业工作负载…...

【日志革新】在ThinkPHP5中实现高效TraceId集成,打造可靠的日志追踪系统

问题背景 最近接手了一个骨灰级的项目&#xff0c;然而在项目中遇到了一个普遍的挑战&#xff1a;由于公司采用 ELK&#xff08;Elasticsearch、Logstash、Kibana&#xff09;作为日志收集和分析工具&#xff0c;追踪生产问题成为了一大难题。尽管 ELK 提供了强大的日志分析功…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

怎么让Comfyui导出的图像不包含工作流信息,

为了数据安全&#xff0c;让Comfyui导出的图像不包含工作流信息&#xff0c;导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo&#xff08;推荐&#xff09;​​ 在 save_images 方法中&#xff0c;​​删除或注释掉所有与 metadata …...