Linux 各类信号量详解
发布时间 - 2017-06-21 00:00:00 点击率:次定义:保护共享资源,使得资源在一个时刻只有一个进程(线程)拥有
原理:信号量值为正时说明空闲,若为0或负值则说明被占用
分类:内核信号量与用户信号量,用户信号量分为POXIS信号量和SYSTEMV信号量,POXIS信号量分为有名信号量和无名信号量
内核信号量:
#include
void sema_init(struct semaphore *sem, int val);
void init_MUTEX(struct semaphore *sem); //初始值1
void init_MUTEX_LOCKED(struct semaphore *sem); //初始值0
void down(struct semaphore *sem); //可睡眠
int down_interruptible(struct semaphore *sem); //可中断
int down_trylock(struct semaphore *sem); //m非阻塞
void up(struct semaphore *sem);
SYSTEMV信号量:
#include
int semget(key_t key, int nsems, int oflag);
int semop(int semid, struct sembuf *opsptr, size_t nops);
int semctl(int semid, int semum, int cmd,...);
POSIX无名信号量
#include
sem_t sem;
int sem_init(sem_t *sem, int pshared, unsigned int val); //pshared为0则线程间共享,pshared为1则父子进程共享
int sem_wait(sem_t *sem);
//阻塞int sem_trywait(sem_t *sem); //非阻塞
int sem_post(sem_t *sem);
int sem_destroy(sem_t *sem);
进程间共享则sem必须放在共享内存区域(mmap, shm_open, shmget),父进程的全局变量、堆、栈中存储是不行的
POSIX有名信号量
sem_t *sem_open(const char *name, int oflag, mode_t mode, int val);
int sem_wait(sem_t *sem);
int sem_trywait(sem_t *sem);
int sem_post(sem_t *sem);
int sem_close(sem_t *sem);
int sem_unlink(const char *name);
每个open的位置都要close和unlink,但只有最后执行的unlink生效
# linux
# 信号量
# 放在
# 都要
# 只有一个
# 值为
# 则说
# 若为
# 全局变量
# sys
# key_t
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么生成URL_Laravel路由命名与URL生成函数详解
google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
Laravel如何配置任务调度?(Cron Job示例)
如何挑选最适合建站的高性能VPS主机?
动图在线制作网站有哪些,滑动动图图集怎么做?
iOS发送验证码倒计时应用
太平洋网站制作公司,网络用语太平洋是什么意思?
如何用好域名打造高点击率的自主建站?
Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册
Laravel如何生成和使用数据填充?(Seeder和Factory示例)
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解
UC浏览器如何设置启动页 UC浏览器启动页设置方法
js实现点击每个li节点,都弹出其文本值及修改
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出
电商网站制作价格怎么算,网上拍卖流程以及规则?
javascript基于原型链的继承及call和apply函数用法分析
如何快速搭建自助建站会员专属系统?
Laravel如何使用Blade组件和插槽?(Component代码示例)
什么是javascript作用域_全局和局部作用域有什么区别?
免费网站制作appp,免费制作app哪个平台好?
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
Internet Explorer官网直接进入 IE浏览器在线体验版网址
如何在腾讯云服务器上快速搭建个人网站?
北京的网站制作公司有哪些,哪个视频网站最好?
魔毅自助建站系统:模板定制与SEO优化一键生成指南
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
Android滚轮选择时间控件使用详解
HTML 中动态设置元素 name 属性的正确语法详解
如何自定义建站之星网站的导航菜单样式?
千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】
Swift中swift中的switch 语句
韩国服务器如何优化跨境访问实现高效连接?
猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】
Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】
Laravel如何集成Inertia.js与Vue/React?(安装配置)
Laravel如何使用Eloquent进行子查询
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
如何快速搭建高效WAP手机网站吸引移动用户?
如何在服务器上配置二级域名建站?


//阻塞