POSIX信号量
DESCRIPTION
POSIX 信号量允许进程间和线程间同步他们的操作. 一个信号量是一个整型(integer),其值不能小于0. 信号量允许2中操作:给信号量的值加1(sem_post); 给信号量的值减一(sem_wait).
如果信号量的值为0, 那么sem_wait() 函数将会阻塞, 直到信号量的值大于0才会解除阻塞. POSIX 信号量有两种形式: 有名信号量 和 无名信号量.
Named semaphores
一个有名信号量有一个唯一的名字, 名字的格式是 /somename; 名字是以NULL结尾的字符串,最大长度不超过NAME_MAX-4 (减4的原因见Accessing named semaphores via the filesystem) 个字节(包括最前面的斜线),
除了首个字节是斜线外,之后的任何字节都不能是斜线.
两个进程可以通过给 sem_open()函数传递相同名字来达到操作同一个信号量的目的.
函数sem_open() 可以创建一个新的有名的信号量 或者 打开一个既存的有名信号量. 信号量被打开后, 就可以使用函数 sem_post() 和 sem_wait() 来操作它.
当一个进程使用完了这个信号量后,他可以使用函数 sem_close() 来关闭这个信号量.
当所有的进程都不再使用这个信号量时,可以调用函数 sem_unlink() 将这个信号量从系统中删除.
Unnamed semaphores (memory-based semaphores)
无名信号量没有名字, 作为代替有名的方法,无名信号量被放置于一个多线程共享的内存区域中(线程共享的信号量) 或者多个进程共享的内存区域中(进程共享的信号量).
线程共享的信号量被放置于一个进程之内的多线程共享内存区,例如全局变量.
进程共享信号量必须被放置于共享内存中(例如使用shm_open()创建的共享内存对象).
在使用无名信号量之前, 必须使用函数 sem_init() 初始化这个无名信号量, 随后才可以使用 sem_post() 和 sem_wait() 来操作这个无名信号量.
当无名信号量不在使用时, 并且信号量所在的内存区域没有被释放, 使用 sem_destroy() 来删除这个无名信号量.
Versions
在linux内核2.6版本之前, Linux只支持无名,线程共享的信号量. 从Linux 内核 2.6版本起 ,glibc提供了NPTL线程实现, 完整的POSXI信号量被提供了.
Persistence(持续性)
信号量是随内核持续的: 如果不调用sem_unlink进行删除, 信号量会一直持续到系统关闭.
Linking
编译时需要链接pthread库.
Accessing named semaphores via the filesystem
在Linux上, 有名信号量时在虚拟文件系统中创建的, 通常挂载在目录 /dev/shm 下, 名字的形式是 sem.somename (信号量名字长度是 NAME_MAX-4 的原因)。
从Linux内核2.6.19版本起, Linux支持使用访问控制列表(ACLs) 来控制虚拟文件系统中对象的权限.
Inherit
CONFORMING TO
POSIX.1-2001.
NOTES
System V 的信号量是过时的, POSIX信号量提供了使用更简单、设计更合理的API.
API List
- sem_close - close a named semaphore
- sem_destroy - destroy an unnamed semaphore
- sem_getvalue - get the value of a semaphore
- sem_init - initialize an unnamed semaphore
- sem_open - initialize and open a named semaphore
- sem_post - unlock a semaphore
- sem_timedwait - lock a semaphore
- sem_trywait, sem_wait - lock a semaphore
- sem_unlink - remove a named semaphore
- sem_wait - lock a semaphore
POSIX信号量的更多相关文章
- 第10章 Posix 信号量
10.1 概述 10.1.1 信号量类型 Posix有名信号量:使用Posix IPC名字,可用于进程或线程间同步: Posix基于内存的信号量:也叫做无名信号量,存放在共享内存中,可用于进程或线程间 ...
- 进程间通信之POSIX信号量
POSIX信号量接口,意在解决XSI信号量接口的几个不足之处: POSIX信号量接口相比于XSI信号量接口,允许更高性能的实现. POSIX信号量接口简单易用:没有信号量集,其中一些接口模仿了我们熟悉 ...
- Linux进程间通信IPC学习笔记之同步二(Posix 信号量)
Linux进程间通信IPC学习笔记之同步二(Posix 信号量)
- Linux进程同步之POSIX信号量
POSIX信号量是属于POSIX标准系统接口定义的实时扩展部分.在SUS(Single UNIX Specification)单一规范中,定义的XSI IPC中也同样定义了人们通常称为System V ...
- Linux多线程实践(5) --Posix信号量与互斥量解决生产者消费者问题
Posix信号量 Posix 信号量 有名信号量 无名信号量 sem_open sem_init sem_close sem_destroy sem_unlink sem_wait sem_post ...
- linux POSIX 信号量介绍
信号量一.什么是信号量信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)使用.多线程可以同时运行多个线程函数完成功能,但是对于共享数据如果不加以锁定,随意改变共享数据的值会发生 ...
- posix信号量与互斥锁
1.简介 POSIX信号量是一个sem_t 类型的变量,但POSIX 有两种信号量的实现机制:无名信号量和命名信号量.无名信号量可以用在共享内存的情况下, 比如实现进程中各个线程之间的互斥和同步.命名 ...
- linux Posix 信号量 二
一.Posix信号量 1.Posix信号量分为两种: 1. 有名信号量:使用Posix IPC名字标识(有名信号量总是既可用于线程间的同步,又可以用于进程间的同步) 2. 内存信号量:存放在共 ...
- linux Posix 信号量 一
信号量是一种用于提供不同进程间或一个给定进程的不同线程间同步手段的原语. linux提供两种信号量,“内核信号量”和“用户态进程信号量”,“用户态信号量”又分为“Posix”,“System V”信号 ...
随机推荐
- 关于Aop切面中的@Before @Around等操作顺序的说明
[转]http://www.cnblogs.com/softidea/p/6123307.html 话不多说,直接上代码: package com.cdms.aop.aspectImpl; impor ...
- (BST 递归) leetcode98. Validate Binary Search Tree
Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as ...
- 2018-2019-2 《Java程序设计》第8周学习总结
20175319 2018-2019-2 <Java程序设计>第8周学习总结 教材学习内容总结 本周学习<Java程序设计>第十五章: 泛型: 泛型(Generics)的主要目 ...
- 暑假第二弹:基于docker的hadoop分布式集群系统的搭建和测试
早在四月份的时候,就已经开了这篇文章.当时是参加数据挖掘的比赛,在计科院大佬的建议下用TensorFlow搞深度学习,而且要在自己的hadoop分布式集群系统下搞. 当时可把我们牛逼坏了,在没有基础的 ...
- 理解Java的NIO
同步与阻塞 同步和异步是针对应用程序和内核的交互而言的. 同步:执行一个操作之后,进程触发IO操作并等待(阻塞)或者轮询的去查看IO的操作(非阻塞)是否完成,等待结果,然后才继续执行后续的操作. 异步 ...
- 大受喜欢安卓触控一体机连接云端数据化管理提供例程DEMO
1.首先,安卓系统坚持了它的开放性,为消费者和开发者同时留出了空间.这是安卓能够快速成长的关键因素.在安卓之前,没有任何一个智能操作系统的开源程度能够像安卓一样.免费开源的安卓系统节约了版权费用. 2 ...
- Codeforces Round #404 (Div. 2) D. Anton and School - 2
题目链接 转自 给你一个字符串问你能构造多少RSBS. #include<bits/stdc++.h> #define LL long long #define fi first #def ...
- day 25-1 接口类、抽象类、多态
# 接口类:python 原生不支持# 抽象类:python 原生支持的 接口类 首先我们来看一个支付接口的简单例子 from abc import abstractmethod,ABCMeta #我 ...
- SpringMVC使用StandardServletMultipartResolver上传文件
DispatcherServlet并没有实现任何解析multipart请求数据的功能,它将该任务委托给了Spring中MultipartResolver策略接口的实现,通过该接口的实现类来解析mult ...
- Java继承详解
目录 前言 继承的格式: 继承的特点: 继承的优缺点 继承的注意点(重要) 继承的使用 前言 类是对对象的抽象,具有共同属性和行为的许多对象抽象出一个类. 例如:有三个学生小明,小红,小李都有姓名,年 ...