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

linux 函数 sem_init () 信号量、sem_destroy()

(1)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2) 代码举例:

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <semaphore.h>
#include <unistd.h>sem_t semaphore;void* thread_function(void* arg) 
{sem_wait(&semaphore); // 等待信号量printf("Thread %ld entered critical section.\n", (long)arg);sleep(1);             // 模拟临界区工作printf("Thread %ld leaving critical section.\n", (long)arg);sem_post(&semaphore); // 释放信号量return NULL;
}int main() 
{pthread_t thread1, thread2;if (sem_init(&semaphore, 0, 1) != 0) {  // 初始化二进制信号量,初始值为1perror("sem_init");exit(EXIT_FAILURE);}pthread_create(&thread1, NULL, thread_function, (void*)1);   // 创建两个线程pthread_create(&thread2, NULL, thread_function, (void*)2);pthread_join(thread1, NULL);    pthread_join(thread2, NULL); // 等待线程完成sem_destroy(&semaphore);  // 销毁信号量return 0;
}

++ 在这个示例中,两个线程尝试进入临界区,但由于信号量的初始值为 1,因此一次只能有一个线程进入。当一个线程进入临界区后,它会等待一秒钟(模拟工作),然后离开临界区并释放信号量,允许另一个线程进入。

(3)

在这里插入图片描述

(4)

谢谢

http://www.lryc.cn/news/530341.html

相关文章:

  • Kafka架构
  • 刷题记录 动态规划-2: 509. 斐波那契数
  • RDP协议详解
  • 设计模式的艺术-观察者模式
  • 【C语言设计模式学习笔记1】面向接口编程/简单工厂模式/多态
  • Baklib如何优化企业知识管理提升团队协作与创新能力分析
  • Dubbo view
  • 分享刷题过程中有价值的两道题目
  • 蓝桥杯例题六
  • DeepSeek 详细使用教程
  • 《tcp/ip协议详解》,tcp/ip协议详解
  • 游戏引擎 Unity - Unity 设置为简体中文、Unity 创建项目
  • 【数据结构】_时间复杂度相关OJ(力扣版)
  • [Java]异常
  • 【C++语言】卡码网语言基础课系列----13. 链表的基础操作I
  • Vue.js组件开发-实现图片浮动效果
  • 自制Windows系统(十一、Windows11GUI)
  • 索罗斯的“反身性”(Reflexivity)理论:市场如何扭曲现实?(中英双语)
  • 力扣257. 二叉树的所有路径(遍历思想解决)
  • 使用朴素贝叶斯对散点数据进行分类
  • 如何实现滑动列表功能
  • 计算机网络一点事(22)
  • C# 语言基础全面解析
  • [原创](Modern C++)现代C++的关键性概念: 流格式化
  • 《数据可视化新高度:Graphy的AI协作变革》
  • C++并发:设计无锁数据结构
  • 蓝桥杯刷题DAY2:二维前缀和 一维前缀和 差分数组
  • 雷电等基于VirtualBox的Android模拟器映射串口和测试CSerialPort串口功能
  • 四、jQuery笔记
  • 流浪 Linux: 外置 USB SSD 安装 ArchLinux