信号量、同步这些名词在进程间通信时就已经说过,在这里它们的意思是相同的,只不过是同步的对象不同而已。但是下面介绍的信号量的接口是用于线程的信号量,注意不要跟用于进程间通信的信号量混淆。

一、什么是信号量

线程的信号量与进程间通信中使用的信号量的概念是一样,它是一种特殊的变量,它可以被增加或减少,但对其的关键访问被保证是原子操作。如果一个程序中有多个线程试图改变一个信号量的值,系统将保证所有的操作都将依次进行。

而只有0和1两种取值的信号量叫做二进制信号量,在这里将重点介绍。而信号量一般常用于保护一段代码,使其每次只被一个执行线程运行。我们可以使用二进制信号量来完成这个工作。

二、信号量的接口和使用

信号量的函数都以sem_开头,线程中使用的基本信号量函数有4个,它们都声明在头文件semaphore.h中。

1、sem_init函数

该函数用于创建信号量,其原型如下:

int sem_init(sem_t *sem, int pshared, unsigned int value);

该函数初始化由sem指向的信号对象,设置它的共享选项,并给它一个初始的整数值。pshared控制信号量的类型,如果其值为0,就表示这个信号量是当前进程的局部信号量,否则信号量就可以在多个进程之间共享,value为sem的初始值。调用成功时返回0,失败返回-1.

2、sem_wait函数

该函数用于以原子操作的方式将信号量的值减1。原子操作就是,如果两个线程企图同时给一个信号量加1或减1,它们之间不会互相干扰。它的原型如下:

int sem_wait(sem_t *sem);</

linux c 网络编程与信号量,详解Linux多线程使用信号量同步相关推荐

  1. linux 查看网络流量来源_详解Linux查看实时网卡流量的几种方式

    在工作中,我们经常需要查看服务器的实时网卡流量.通常,我们会通过这几种方式查看Linux服务器的实时网卡流量. 1. sar -n DEV 1 2 sar命令包含在sysstat工具包中,提供系统的众 ...

  2. Visual C++网络编程经典案例详解 第9章 实用播放器 数据读取与播放控制 识别数据文件信息

    识别数据文件信息主要是指对mp3数据格式识别 定义顺序代码如下 typedef struct mp3_struct //自定义mp3结构体 {char heade[3]; //tag字符标记char ...

  3. linux中whoami命令的作用是,linux whoami命令参数及用法详解(linux查看登陆用户名)

    linux whoami命令参数及用法详解(linux查看登陆用户名) 2019年05月31日 | 萬仟网科技 | 我要评论 whoami 命令显示登录名.与使用命令 who 并指定 am i 不同, ...

  4. linux 内存 参数,linux free命令参数及用法详解(linux查看内存命令)

    linux free命令参数及用法详解(linux查看内存命令) 2019年05月31日 | 萬仟网科技 | 我要评论 free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段 ...

  5. linux中的su-命令的功能,linux su命令参数及用法详解(linux切换用户命令)

    linux su命令参数及用法详解(linux切换用户命令) 发布时间:2012-07-21 12:12:39   作者:佚名   我要评论 su的作用是变更为其它使用者的身份,超级用户除外,需要键入 ...

  6. linux 的中断 命令,linux skill命令参数及用法详解(linux中断进程执行命令)

    linux skill命令参数及用法详解(linux中断进程执行命令) 发布时间:2012-07-21 12:09:37   作者:佚名   我要评论 linux 冻结进程命令 skill 使用详解 ...

  7. linux命令优先级设置,linux renice命令参数及用法详解(linux修改程序运行优先级命令)...

    linux renice命令参数及用法详解(linux修改程序运行优先级命令) 发布时间:2012-07-21 12:45:32   作者:佚名   我要评论 renice指令可重新调整程序执行的优先 ...

  8. linux网络编程常用函数详解与实例(socket--bind--listen--accept)

    常用的网络命令: netstat 命令netstat是用来显示网络的连接,路由表和接口统计等网络的信息.netstat有许多的选项我们常用的选项是 -an 用来显示详细的网络状态.至于其它的选项我们可 ...

  9. linux下的arp刷新命令详解,linux arp 命令常用参数详解

    linux arp 命令常用参数详解 linux arp 命令常用参数详解 显示和修改地址解析协议(ARP)使用的"IP 到物理"地址转换表. ARP -s inet_addr e ...

  10. linux rm命令参数及用法详解---linux删除文件或目录命令

    http://www.linuxso.com/command/rm.html linux下rm命令使用详解---linux删除文件或目录命令 用户可以用rm命令删除不需要的文件.该命令的功能为删除一个 ...

最新文章

  1. 人脑启发AI设计:让神经网络统一翻译语音和文本
  2. c语言send方法,高效编写代码的方法(九):了解objc_msgSend
  3. 给定一个n节点的二叉树,写出一个O(n)时间非递归过程,将该树每个节点关键字输出,可以使用一个栈作为辅助数据结构(算法导论第十章10.4-3)
  4. brasb 密码自动应答
  5. 无法加载站点/服务的所有 ISAPI 筛选器,因此启动中止——Service Unavailable解决方法合集...
  6. 应届生简历如何写实习经历?
  7. PDF转Word的免费软件推荐
  8. 从计算机硬件系统来看 不管计算机配置,计算机组装与维修章节练习题201311
  9. 哇哦!?固件裁剪到1.82K? 他们是怎么做到的?
  10. 力扣刷题 DAY_74 回溯
  11. Linux那些事儿 之 我是PCI(1)PCI,我们来了
  12. developer.biao.daily.20140731
  13. 使用经验 1 C++程序由哪些部分构成
  14. 在线客服系统的功能有哪些是非常重要的?
  15. [转] 公共DNS,114.114.114.114和8.8.8.8
  16. JS 判断input输入框日期时间格式是否符合YY-MM-DD HH:MM:SS和是否符合实际日期规范方法以及SQL时间日期格式转化存储
  17. asp.net DES加密解密
  18. 11-字符串的格式化
  19. sql查询语句-平均分、最高最低分、排序
  20. 成都网站建设SEO 成都网站SEO优化方案制作

热门文章

  1. html div flex,CSS中flex布局详解
  2. [HR规划]什么是人力资源规划?(zt)
  3. Cadence PCB仿真 使用 Allegro PCB SI 电源和地网络的PDN分析功能介绍图文教程
  4. 个人看法(设计思想)
  5. Android 编译 Jack简介
  6. Web端程序实现文件下载
  7. rebar3简单使用
  8. react中 ajax跨域请求
  9. 使用STM32F103CBT6自制ST LINK V2-1多功能烧录器
  10. OpenCV图像色温