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

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) {  // 初始化二进制信号量,初始值为1
        perror("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.kler.cn/a/528801.html

相关文章:

  • solidity高阶 -- Eth支付
  • C# 数组和列表的基本知识及 LINQ 查询
  • AutoDL 云服务器:xfce4 远程桌面 终端乱码 + 谷歌浏览器
  • Mybatis框架中的foreach标签解析
  • 【AI绘画】MidJourney关键词{Prompt}全面整理
  • nodejs:express + js-mdict 网页查询英汉词典
  • 【react+redux】 react使用redux相关内容
  • langchain 实现多智能体多轮对话
  • 什么情况下,C#需要手动进行资源分配和释放?什么又是非托管资源?
  • 无心剑七绝《深度求索》
  • 数据密码解锁之DeepSeek 和其他 AI 大模型对比的神秘面纱
  • 解锁Linux共享内存:进程通信的极速引擎
  • 人机交互系统实验二 图形用户界面的设计
  • 代码练习3
  • 知识图谱中如何做种子对齐?
  • 步进电机的型号和分类
  • 浅析CDN安全策略防范
  • SCRM系统如何提升客户管理及业务协同的效率与价值
  • Python-基于PyQt5,wordcloud,pillow,numpy,os,sys的智能词云生成器
  • 2025.2.1——四、php_rce RCE漏洞|PHP框架
  • 【08-飞线和布线与输出文件】
  • STM32 TIM编码器接口测速
  • 大模型本地部署使用方法(Ollama脚手架工具、FisherAI浏览器大模型插件、AnythingLLM大模型集成应用平台)
  • 【技海登峰】Kafka漫谈系列(一)Kafka服务集群的核心组件
  • 力扣第149场双周赛
  • DeepSeek或准备适配国产GPU,将推动国产芯片生态发展