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

潍坊网站设计在线培训网站次要关键词

潍坊网站设计,在线培训网站次要关键词,wordpress 插件冲突,wordpress安装语言设置中文目录 1. 信号量的概念 2. POSIX 信号量相关函数 初始化信号量 :sem_init 获取信号量 :sem_wait 释放信号量 : sem_post 销毁信号量 :sem_destroy 3. 示例代码 POSIX 信号量是 POSIX 操作系统标准定义的一种同步原语&#x…

        

目录

1. 信号量的概念

2. POSIX 信号量相关函数

初始化信号量 :sem_init

获取信号量 :sem_wait

释放信号量 : sem_post

销毁信号量 :sem_destroy

3. 示例代码


POSIX 信号量是 POSIX 操作系统标准定义的一种同步原语,用于多线程(以及多进程)环境中的同步与互斥操作。在多线程编程中,POSIX 信号量有助于控制对共享资源的访问,防止竞态条件的发生。

1. 信号量的概念

        信号量本质上是一个整型变量,它通过一个计数器来控制对共享资源的访问。当线程需要访问共享资源时,它会尝试获取信号量(将计数器减 1)。如果计数器的值大于 0,获取操作成功,线程可以继续执行;如果计数器的值为 0,线程将被阻塞,直到其他线程释放信号量(将计数器加 1)。

2. POSIX 信号量相关函数

初始化信号量 :sem_init
  • 函数原型
    int sem_init(sem_t *sem, int pshared, unsigned int value);
    
  • 功能:初始化一个未命名的信号量。
  • 参数
    • sem:指向要初始化的信号量变量的指针。
    • pshared:用于指定信号量的共享方式。如果 pshared 的值为 0,表示这个信号量是当前进程内的线程共享;如果 pshared 非 0,表示这个信号量可以在多个进程间共享(常用于进程间通信场景)。在多线程场景中,通常设置为 0。
    • value:指定信号量的初始值。这个值表示可用资源的数量。例如,如果 value 为 1,通常用于实现互斥锁(因为同一时间只允许一个线程获取信号量,即只有一个线程能访问共享资源);如果 value 大于 1,则可以允许多个线程同时访问共享资源,具体数量由 value 决定。
  • 返回值:成功时返回 0,失败时返回 -1,并设置 errno 以指示错误原因,如 EINVAL(无效的参数)或 ENOMEM(内存不足)。
获取信号量 :sem_wait
  • 函数原型
    int sem_wait(sem_t *sem);
    
  • 功能:尝试获取信号量。如果信号量的值大于 0,函数将信号量的值减 1,然后返回,调用线程可以继续执行;如果信号量的值为 0,调用线程会被阻塞,直到信号量的值变为大于 0。
  • 参数sem 指向要操作的信号量变量的指针。
  • 返回值:成功时返回 0,失败时返回 -1,并设置 errno 来表示错误原因,如 EINTR(操作被信号中断)。
释放信号量 : sem_post
  • 函数原型
    int sem_post(sem_t *sem);
    
  • 功能:释放信号量,将信号量的值加 1。如果有其他线程正在等待该信号量(即信号量的值为 0 且有线程在 sem_wait 中阻塞),则会唤醒其中一个等待线程,使其能够获取信号量并继续执行。
  • 参数sem 指向要操作的信号量变量的指针。
  • 返回值:成功时返回 0,失败时返回 -1,并设置 errno 指示错误原因,如 EINVAL(无效的信号量)。
销毁信号量 :sem_destroy
  • 函数原型
    int sem_destroy(sem_t *sem);
    
  • 功能:销毁一个已初始化的信号量,释放与之相关的所有资源。在销毁信号量之前,应确保没有线程正在等待该信号量,并且所有对该信号量的操作已经完成。
  • 参数sem 指向要销毁的信号量变量的指针。
  • 返回值:成功时返回 0,失败时返回 -1,并设置 errno 指示错误原因,如 EBUSY(信号量正在被使用)。

3. 示例代码

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <semaphore.h>// 定义共享资源和信号量
int shared_resource = 0;
sem_t semaphore;// 线程函数
void* increment_shared_resource(void* arg) {// 获取信号量sem_wait(&semaphore);shared_resource++;printf("Thread incremented shared_resource to %d\n", shared_resource);// 释放信号量sem_post(&semaphore);return NULL;
}int main() {const int num_threads = 5;pthread_t threads[num_threads];// 初始化信号量if (sem_init(&semaphore, 0, 1) != 0) {perror("Semaphore initialization failed");return 1;}// 创建线程for (int i = 0; i < num_threads; i++) {if (pthread_create(&threads[i], NULL, increment_shared_resource, NULL) != 0) {perror("Thread creation failed");return 1;}}// 等待所有线程完成for (int i = 0; i < num_threads; i++) {if (pthread_join(threads[i], NULL) != 0) {perror("Thread join failed");return 1;}}// 销毁信号量sem_destroy(&semaphore);return 0;
}

http://www.cadmedia.cn/news/13034.html

相关文章:

  • 郴州装修公司排名前十口碑推荐厦门seo排名
  • 手机大型网站seo推广人员
  • 大作设计网站官网登录入口百度推广客服投诉电话
  • 什么是网络营销方法seo大全
  • 深圳建站公司哪个济南兴田德润简介排名第一的助勃药
  • 信誉好的天津网站建设搜索引擎排名优化seo课后题
  • logo设计公司有哪些职位山东seo
  • 大埔网站建设企业培训公司
  • 福州阿里巴巴网站建设如何提高seo关键词排名
  • 360网站建设企业市场调研报告内容
  • 网站如何做后台网站建设公司推荐
  • 兰州市建设局网站国贸大厦网络营销推广方案ppt
  • 美食网站的建设论文河南网站公司
  • 网站开发开题报告计划进度安排搜索引擎营销经典案例
  • 网站建设实训室介绍浙江网站推广运营
  • 陕煤化工建设集团网站b站网站推广
  • 广东省医院建设协会网站太原整站优化排名外包
  • 网站建设公司沈阳武汉seo计费管理
  • 曲靖高端网站制作域名查询注册商
  • 学校怎么做网站hs网站推广
  • 网站快速优化排名2019年 2022疫情爆发
  • 聊城做网站好的公司推广普通话的重要意义
  • 杏林建设网站seo词条
  • 素材网站建设seo智能优化公司
  • 遂宁市网站建设小程序推广平台
  • 个人博客动态网站设计近期网络舆情事件热点分析
  • 网站改版建设方案企业qq下载
  • 手机网站开发多少钱seo优化方式
  • 四川长昕建设工程有限公司网站网页设计工作室长沙
  • 怎么做电子商务的网站推广腾讯广告推广平台