10.1 概述

10.1.1 信号量类型

Posix有名信号量:使用Posix IPC名字,可用于进程或线程间同步;

Posix基于内存的信号量:也叫做无名信号量,存放在共享内存中,可用于进程或线程间同步;

System V信号量:在内核中维护,可用于进程或线程间同步。

(1)二值信号量:(Posix 信号量)

(2)计数信号量:(Posix 信号量)

(3)信号量集:(System V信号量)

10.1.2 信号量三种操作

(1)创建(create)

(2)等待(wait),P操作,信号量-1

(3)挂出(post),V操作,信号量+1

10.1.3 信号量、互斥锁、条件变量三者差异

(1)互斥锁必须是给它上锁的线程进行解锁,信号量可以由其他线程挂出;

(2)互斥锁要么锁住,要么解开(类似于二值信号量);

(3)信号量有一个与之关联的计数器,信号量挂出操作后总是被记住;条件变量发送信号后,如果没有线程等待该条件变量,那么该信号就丢失。

Posix基本原理指出有了互斥锁和条件变量还提供信号量的原因是:信号量主要目的是提供进程间同步,互斥锁和条件变量是线程间同步的。但是它们都可以用于进程间同步和线程间同步,看具体的场景选择同步方式。

10.2 有名信号量

头文件

#include <fcntl.h> /* For O_* constants */

#include <sys/stat.h> /* For mode constants */

#include <semaphore.h>

创建或打开 sem_t *sem_open(const char *name, int oflag);
  sem_t *sem_open(const char *name, int oflag, mode_t mode, unsigned int value);
关闭 int sem_close(sem_t *sem);
删除 int sem_unlink(const char *name);
 等待 int sem_wait(sem_t *sem);
尝试等待  int sem_trywait(sem_t *sem);
超时等待  int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout);
挂起  int sem_post(sem_t *sem);
获取信号量值  int sem_getvalue(sem_t *sem, int *sval);
说明 Link with -pthread.

10.3 无名信号量

头文件 #include <semaphore.h>
 初始化 int sem_init(sem_t *sem, int pshared, unsigned int value);
销毁  int sem_destroy(sem_t *sem);
说明  Link with -pthread.
  用于不同线程:pshared = 0;用于不同进程:pshared = 1,在共享内存中创建无名信号量 

第10章 Posix 信号量的更多相关文章

  1. 多线程编程之Apue3rd_Chapter15.10之posix信号量

    看了APUE的chapter15,只重点看了15.10,学习了posix信号量.Posix信号量比起xsi信号量的优点是性能更好,在Linux3.2.0平台上性能提升很大.其中命名信号量使用方法如下. ...

  2. 第三十九章 POSIX信号量与互斥锁

    POSIX信号量相关函数 sem_open 功能: initialize and open a named semaphore 原型: sem_t *sem_open(const char *name ...

  3. POSIX信号量与互斥锁实现生产者消费者模型

    posix信号量 Link with -lpthread. sem_t *sem_open(const char *name, int oflag);//打开POSIX信号量 sem_t *sem_o ...

  4. 高性能Linux服务器 第10章 基于Linux服务器的性能分析与优化

    高性能Linux服务器 第10章    基于Linux服务器的性能分析与优化 作为一名Linux系统管理员,最主要的工作是优化系统配置,使应用在系统上以最优的状态运行.但硬件问题.软件问题.网络环境等 ...

  5. 《Unix网络编程》卷2 读书笔记 第2章- Posix IPC

    1. 概述 Posix IPC 包括:Posix消息队列.Posix信号量.Posix共享内存区 Posix IPC在访问它们的函数和描述它们的信息上有一些类似点. 本章讲述所有这些共同属性:用于标识 ...

  6. Linux进程同步之POSIX信号量

    POSIX信号量是属于POSIX标准系统接口定义的实时扩展部分.在SUS(Single UNIX Specification)单一规范中,定义的XSI IPC中也同样定义了人们通常称为System V ...

  7. 【安富莱】【RL-TCPnet网络教程】第10章 RL-TCPnet网络协议栈移植(FreeRTOS)

    第10章     RL-TCPnet网络协议栈移植(FreeRTOS) 本章教程为大家讲解RL-TCPnet网络协议栈的FreeRTOS操作系统移植方式,学习了第6章讲解的底层驱动接口函数之后,移植就 ...

  8. posix信号量与互斥锁

    1.简介 POSIX信号量是一个sem_t 类型的变量,但POSIX 有两种信号量的实现机制:无名信号量和命名信号量.无名信号量可以用在共享内存的情况下, 比如实现进程中各个线程之间的互斥和同步.命名 ...

  9. linux c编程:Posix信号量

    POSIX信号量接口,意在解决XSI信号量接口的几个不足之处: POSIX信号量接口相比于XSI信号量接口,允许更高性能的实现. POSIX信号量接口简单易用:没有信号量集,其中一些接口模仿了我们熟悉 ...

随机推荐

  1. 转--基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用

    原文  http://www.cnblogs.com/wuhuacong/p/3317223.html 基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用 在前面介绍了两篇关于我的基 ...

  2. vb6中webbrowser控件树转换备忘

    Dim doc As HTMLDocument Set doc = WebBrowser1.Document Dim inputs As IHTMLElementCollection Set inpu ...

  3. CARP-VRRP-HSRP

    CARP-VRRP-HSRP http://www.openbsd.org/faq/pf/carp.html

  4. 【转】Winform 去掉 最大化 最小化 关闭按钮(不是关闭按钮变灰)终极解决办法

    不墨迹, 如图 : 网上 看了,好多 给的 答案 乱码七糟,都是扯淡,于是乎 自己 写,代码如下:窗体的大小暂时设置为:(598, 362) 涂红的数据根据你的窗体大小改动 using System; ...

  5. Apache ab并发负载压力测试

    由于现在网站都需要能够承受高并发要求的能力,所以当我们写完代码后,如果需要上线,最好都经过压力测试后,这样比较好 运行: 在Windows系统下,打开cmd命令行窗口,定位到apache安装目录的bi ...

  6. struts checkbox选中

    <input type="checkbox" id="something" name="something" /> ↓ < ...

  7. Javascript跨域问题解决方案

    ---本方法来自网上,因最近项目需求,解决了三天未果,最终发现此文并测试可用. 一个 非常优雅绝妙的解决方案!话不多说,直接上解决方案原理图: 该图要解决的问题说明如下:在AAA.com域名下的ind ...

  8. Javascript之类型检测

    一.检测原始(基本数据:字符串.数字.布尔.null.undefined)类型. 用typeof检测原始类型:1.对于字符串,typeof返回"string"; 2.对于数字,ty ...

  9. erlang的escript脚本

    参考霸爷的博客 测试例子 #!/usr/bin/env escript %%! -smp enable -sname mmcshadow -mnesia debug verbose[/color] m ...

  10. byte[] 与字符串转换

    //取值之后进行 StringBuffer buffer=new StringBuffer(); for (int i = 0; i < enBytes.length; i++) { if(i! ...