Posix信号量操作函数
2024-09-30 07:14:03
Posix信号量:
分类:
Posix有名信号量:使用Posix IPC名字标识,可用于线程或进程间同步
Posix基于内存的信号量:存放在共享内存区中,可用于进程或线程间的同步
Posix基于内存的信号量:存放在共享内存区中,可用于进程或线程间的同步
sem_open()、sem_close()、sem_unlink()函数:
#include <semaphore.h> // 创建一个新的有名信号量或打开一个已存在的有名信号量
// 成功返回指向信号量的指针,出错返回SEM_FAILED
sem_t *sem_open(const char *name, int oflag, /* mode_t mode, unsigned int value */);
// name:IPC 名字,可能是某个文件系统中的一个真正路径名,也可能不是
// oflag: 可以是0、O_CREAT、O_CREAT|O_EXCL
// 在oflag指定了O_CREAT标志后,mode、value参数必须指定(mode指定权限位,value指定信号量初值) // 关闭一个由 sem_open 打开的信号量
// 成功返回0,出错返回-1
int sem_close(sem_t *sem); // 将某个有名信号量从系统删除
// 成功返回0,出错返回-1
int sem_unlink(const char *name);
sem_wait()、sem_trywait()函数:
#include <semaphore.h> // 测试指定信号量的值,若该值大于0,则将其减1并立即返回,若该值为0,则
// 线程被投入睡眠,等待该值变为大于0,再将其减1并返回
// 成功返回0,出错返回-1
int sem_wait(sem_t *sem); //
// 测试指定信号量的值,若该值大于0,则将其减1并立即返回,若该值为0,则
// 返回一个EAGAIN错误
// 成功返回0,出错返回-1
int sem_trywait(sem_t *sem);
sem_post()函数:
#include <semaphore.h> // 在线程使用完某个信号量时,调用sem_post(),该函数将指定信号量的值加1,
// 然后唤醒等待该信号量值变为正数的任意线程
// 成功返回0,出错返回-1
int sem_post(sem_t *sem);
sem_getvalue()函数:
#include <semaphore.h> // 通过valp返回指定信号量的当前值,若当前信号量已上锁,则返回0或某个
// 负数(其绝对值为等待该信号量解锁的线程数)
// 成功返回0,出错返回-1
int sem_getvalue(sem_t *sem, int *valp);
sem_init()、sem_destroy函数:
#include <semaphore.h> // 初始化一个基于内存的信号量(sem指向的)
int sem_init(sem_t *sem, int shared, unsigned int value);
// sem参数指向应用程序分配的sem_t变量
// shared参数为0时,待初始化的信号量是在同一进程的各个线程中共享的(具有随进程的持续性)
// shared参数非0时,待初始化的信号量必须放在某种类型的共享内存区中,想
// 要是由此信号量的所有进程都需要可以访问该共享内存区(随该共享内存区持续)
// value参数为该信号量的初始值 // 摧毁指定的基于内存的信号量
// 成功返回0,出错返回-1
int sem_destroy(sem_t *sem);
最新文章
- 通过 floating IP 访问 VIP - 每天5分钟玩转 OpenStack(126)
- 手把手教你写一个RN小程序!
- [HttpPost]和[AcceptVerbs(HttpVerbs.Post)]区别
- The Installation and Compilation of OpenCASCADE
- ORACLE 自定义聚合函数
- css3 Gradient背景
- POJ3169 Layout
- 深入浅出Redis01安装
- 封装pdo单例模式类
- java.util.zip对zip文件解压
- 移动端类似IOS的滚动年月控件(需要jQuery和iScroll)
- Asp.net MVC 自定义路由在IIS7以上,提示Page Not Found 解决方法
- Http Statis 500 -错误笔记
- WEB.xml配置文件解读
- 使用bootstrap时遇到的问题及解决办法
- 键盘皇者 RealForce 104Pro独家评测
- JAVA_SE基础——36.static的实际应用
- Floyd 算法求多源最短路径
- [转]matplotlib - plt.rcParams、matshow/cmap/坐标轴设置
- JavaScriptConverter
热门文章
- SQL Server on Ubuntu
- Laya for...in和for each...in
- .NET重构(二):ArrayList,List,IList的联系和区别
- 九度oj 题目1398:移动次数
- 在LoadRunner向远程Linux/Unix执行命令行并收集性能数据
- 集群高可用之lvs+keepalive
- linux的自启动服务脚本的(/etc/rc.d/init.d或者其链接/etc/init.d)
- Python logging 学习
- 【bzoj4804】欧拉心算 欧拉函数
- BZOJ3261 最大异或和 【可持久化trie树】