信号量sem 的用法
#include <semaphore.h>
sem_t sem;
sem_init(&sem, 0, 0);
sem_post(&sem);
sem_wait(&sem);
sem_destroy(&sem);
信号量的数据类型为结构sem_t,它本质上是一个长整型的数。函数sem_init()用来初始化一个信号量。它的原型为:
extern int sem_init __P ((sem_t *__sem, int __pshared, unsigned int __value));
sem为指向信号量结构的一个指针;
pshared不为0时此信号量在进程间共享,否则只能为当前进程的所有线程共享;
value给出了信号量的初始值。
函数sem_post( sem_t *sem )用来增加信号量的值。
当有线程阻塞在这个信号量上时,调用这个函数会使其中的一个线程不在阻塞,选择机制同样是由线程的调度策略决定的。
函数sem_wait( sem_t *sem )被用来阻塞当前线程直到信号量sem的值大于0,解除阻塞后将sem的值减一,表明公共资源经使用后减少。函数sem_trywait ( sem_t *sem )是函数sem_wait()的非阻塞版本,它直接将信号量sem的值减一。
函数sem_destroy(sem_t *sem)用来释放信号量sem。
---------------------------------------------------------------
见过的实例用在阻塞主线程上,等程序运行结束资源释放的时候 使用sem_post(sem); 来结束阻塞。
转:http://blog.sina.com.cn/s/blog_af9acfc6010191bj.html
信号量sem 的用法相关推荐
- 用于线程间的同步与互斥-信号量sem
一.线程 首先我们说一下什么是线程.线程是计算机中独立运行的最小单位,在运行时占用很少的系统资源,由于每个线程占用的CPU时间是由系统分配的,因此我们可以把线程看作为系统分配CPU时间的基本单位.在我 ...
- 信号量(sem)学习笔记
信号量是一个特殊的整数值,主要用来控制多个进程对临界资源的互斥访问,进程根据信号量来判断是否有访问的资源,而信号和信号量是不同的概念,信号是一种处理异步事件的方法,而信号量是一种进程同步机制. 信号量 ...
- Linux线程同步机制四--信号量sem
一.信号量基本原理 信号量概念由荷兰科学家Dijkstra首先提出.信号量是一个特殊类型的变量,它可以被增加或者减少.但对其的关键访问被保证是原子操作,即使在一个多线程程序中也是如此. 信号量有两种类 ...
- 线程同步-信号量-strand的用法总结
这里展示不用boost::asio::strand而是利用常规线程同步的手段来完成线程的同步. #include <iostream> #include <boost/asio.hp ...
- 判断sem信号量为零_Linux线程同步(互斥量、信号量、条件变量、生产消费者模型)...
为什么要线程同步? 线程间有很多共享资源,都对一个共享数据读写操作,线程操作共享资源的先后顺序不确定,可能会造成数据的冲突 看一个例子 两个线程屏行对全局变量count++ (采用一个val值作为中间 ...
- 判断sem信号量为零_kernel.sem信号量调优
一.kernel.sem 信号量 sem其实是semaphores的缩写,这个在oracle数据库配置的时候,会需要调整该值,对于一般的程序来说基本是用不到的.不过现网中也遇到过个别主机上zabbix ...
- linux 内核信号量与用户态信号量(system v,信号量在Linux多线程机制中的应用
[摘 要]本文以信号量原理为基础,重点阐述信号量在Linux多线程同步机制中的实现特色. [关键词]信号量:Linux:多线程:同步 1 信号量 1965年E. W. Dijkstra首次提出信号量的 ...
- 最全面的linux信号量解析
信号量 一.什么是信号量 信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程) 所拥有. 信号量的值为正的时候,说明它空闲.所测试的线程可以锁定而使用它.若为0,说明 它被占用, ...
- 线程间同步的几种方法--互斥锁,条件变量,信号量,读写锁
一.互斥锁(mutex) 锁机制是同一时刻只允许一个线程执行一个关键部分的代码. 1 . 初始化锁 int pthread_mutex_init(pthread_mutex_t *mutex,cons ...
最新文章
- 七天学会「股票数据分析软件」的开发(下)
- linux后台运行快捷键,Linux命令放入后台运行方法(和Ctrl+Z)详解版
- mysql 5.7 修改配置文件_如何找到并修改MySQL57的配置文件m
- spring 注解上传文件 @RequestParam,FormData上传文件
- c语言中二次规划函数是哪个好,c语言程序设计规划模拟试题二(含答案).doc
- android.support.v7.app.actionbaractivity 报错
- JAVA计算机毕业设计无人智慧药柜系统设计(附源码、数据库)
- Flash闪存储存原理以及NAND flash、NOR flash(详细)对比总结
- 多功能雨伞项目计划书_雨伞策划书范文
- 若依前后端分离密码修改成功,登录提示用户名或密码不正确。
- 解决 kindle 书籍字体颜色偏淡问题的方法
- Android源码编译:任意界面屏幕边缘上滑弹出快捷操作栏【一键加速、开关控制】
- Microsoft Teams管理(一)
- 手游上线前的五种测试的基础方法
- 从“赌场”到“大市场”——巴菲特进阶式看中国
- 背包模块的设计(日常任务模块, 武器排行榜, 战术, 英雄战斗力, 活动模块)
- “da shen” in my heart
- 推荐这款,SpringBoot 开源商城系统,挣钱太轻松了
- SpringBoot -- 服务网关APIGateway
- pySerial使用初步