信号量
解决什么问题
进程或线程同步
如何解决?
一个整数n,不允许小于0,小于0就会阻塞程序运行,两个操作来控制: sem_post(3)
每次+1, sem_wait(3)
每次-1。比如初始化时候n=0, 一个线程执行sem_wait()
,发现n是0,如果-1,就会小于0,但信号量不允许小于0,就等着。另一个线程执行sem_post()
,将n+1,此时n==1,sem_wait()
之后,n=0, 操作可以进行,第一个线程就可以继续往后了。
信号量类型
命名信号量:进程间同步
匿名信号量:进程或线程间同步,进程间的信号量需要放到共享内存中(shmget()获取),线程间的信号量需要放到线程都能访问的内存(全局变量或堆中)
命名信号量
信号量名字叫: "/somename"
sem_open(3)
:创建或打开
sem_post(3)
: +1
sem_wait(3)
: -1,不成功会阻塞
sem_trywait(sem_t *sem)
: -1,不成功立刻返回,不会阻塞
sem_timedwait(sem_t *sem, const struct timespec *abs_timeout)
: -1,不成功会等一段时间再返回
sem_close(3)
: 关闭
sem_unlink(3)
: 删除
匿名信号量
n存放位置需要用户提前申请
sem_init(3)
: 初始化
sem_post(3)
: +1
sem_wait(3)
: -1,不成功会阻塞
sem_trywait(sem_t *sem)
: -1,不成功立刻返回,不会阻塞
sem_timedwait(sem_t *sem, const struct timespec *abs_timeout)
: -1,不成功会等一段时间再返回
sem_destroy(3)
: 先销毁,用户自己再释放n存放的位置
原文地址:https://www.cnblogs.com/suntus/p/15225749.html
- 怎样将 MySQL 数据表导入到 Elasticsearch
- Spring data 数据库建表(一对一,一对多,多对多)
- Apache Sqoop 将mysql导入到Hadoop HDFS
- Redis 4.0.0 一键安装脚本,CentOS 7 systemd 完美启动
- Spring boot with Apache Hive
- Apache Hive 快速入门
- CentOS 7.3 + Server JRE 1.8 + Hadoop-2.8.0
- Apache Hbase 快速入门
- Mototrbo TMS 协议分析(数字电台短信协议分析)
- Nginx 反向代理可以缓存 HTTP POST 请求页面吗?
- Spring boot with Hive
- Spring data 如何定义默认时间与日期
- Spring boot with Oauth2
- Elasticsearch Cluster 安装与配置
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法