#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 的用法相关推荐

  1. 用于线程间的同步与互斥-信号量sem

    一.线程 首先我们说一下什么是线程.线程是计算机中独立运行的最小单位,在运行时占用很少的系统资源,由于每个线程占用的CPU时间是由系统分配的,因此我们可以把线程看作为系统分配CPU时间的基本单位.在我 ...

  2. 信号量(sem)学习笔记

    信号量是一个特殊的整数值,主要用来控制多个进程对临界资源的互斥访问,进程根据信号量来判断是否有访问的资源,而信号和信号量是不同的概念,信号是一种处理异步事件的方法,而信号量是一种进程同步机制. 信号量 ...

  3. Linux线程同步机制四--信号量sem

    一.信号量基本原理 信号量概念由荷兰科学家Dijkstra首先提出.信号量是一个特殊类型的变量,它可以被增加或者减少.但对其的关键访问被保证是原子操作,即使在一个多线程程序中也是如此. 信号量有两种类 ...

  4. 线程同步-信号量-strand的用法总结

    这里展示不用boost::asio::strand而是利用常规线程同步的手段来完成线程的同步. #include <iostream> #include <boost/asio.hp ...

  5. 判断sem信号量为零_Linux线程同步(互斥量、信号量、条件变量、生产消费者模型)...

    为什么要线程同步? 线程间有很多共享资源,都对一个共享数据读写操作,线程操作共享资源的先后顺序不确定,可能会造成数据的冲突 看一个例子 两个线程屏行对全局变量count++ (采用一个val值作为中间 ...

  6. 判断sem信号量为零_kernel.sem信号量调优

    一.kernel.sem 信号量 sem其实是semaphores的缩写,这个在oracle数据库配置的时候,会需要调整该值,对于一般的程序来说基本是用不到的.不过现网中也遇到过个别主机上zabbix ...

  7. linux 内核信号量与用户态信号量(system v,信号量在Linux多线程机制中的应用

    [摘 要]本文以信号量原理为基础,重点阐述信号量在Linux多线程同步机制中的实现特色. [关键词]信号量:Linux:多线程:同步 1 信号量 1965年E. W. Dijkstra首次提出信号量的 ...

  8. 最全面的linux信号量解析

    信号量 一.什么是信号量 信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程) 所拥有. 信号量的值为正的时候,说明它空闲.所测试的线程可以锁定而使用它.若为0,说明 它被占用, ...

  9. 线程间同步的几种方法--互斥锁,条件变量,信号量,读写锁

    一.互斥锁(mutex) 锁机制是同一时刻只允许一个线程执行一个关键部分的代码. 1 . 初始化锁 int pthread_mutex_init(pthread_mutex_t *mutex,cons ...

最新文章

  1. 七天学会「股票数据分析软件」的开发(下)
  2. linux后台运行快捷键,Linux命令放入后台运行方法(和Ctrl+Z)详解版
  3. mysql 5.7 修改配置文件_如何找到并修改MySQL57的配置文件m
  4. spring 注解上传文件 @RequestParam,FormData上传文件
  5. c语言中二次规划函数是哪个好,c语言程序设计规划模拟试题二(含答案).doc
  6. android.support.v7.app.actionbaractivity 报错
  7. JAVA计算机毕业设计无人智慧药柜系统设计(附源码、数据库)
  8. Flash闪存储存原理以及NAND flash、NOR flash(详细)对比总结
  9. 多功能雨伞项目计划书_雨伞策划书范文
  10. 若依前后端分离密码修改成功,登录提示用户名或密码不正确。
  11. 解决 kindle 书籍字体颜色偏淡问题的方法
  12. Android源码编译:任意界面屏幕边缘上滑弹出快捷操作栏【一键加速、开关控制】
  13. Microsoft Teams管理(一)
  14. 手游上线前的五种测试的基础方法
  15. 从“赌场”到“大市场”——巴菲特进阶式看中国
  16. 背包模块的设计(日常任务模块, 武器排行榜, 战术, 英雄战斗力, 活动模块)
  17. “da shen” in my heart
  18. 推荐这款,SpringBoot 开源商城系统,挣钱太轻松了
  19. SpringBoot -- 服务网关APIGateway
  20. pySerial使用初步

热门文章

  1. 网络研讨会的邀请:SQL优化:你不是一个人在战斗
  2. 基于windows的IDS配置完全攻略五
  3. 施耐德EVlink 电动车充电站有新漏洞,可导致电动车遭劫持
  4. 认识下这位全能型漏洞猎人
  5. php dirname(_FILE_)
  6. Londiste3 Install
  7. linux内存管理之malloc
  8. WinForm两点注意的地方
  9. linux c 获取文件数量
  10. shell脚本----for循环-转 Syntax error: Bad for loop variable