Posix信号量:

分类:

Posix有名信号量:使用Posix IPC名字标识,可用于线程或进程间同步
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);

最新文章

  1. 通过 floating IP 访问 VIP - 每天5分钟玩转 OpenStack(126)
  2. 手把手教你写一个RN小程序!
  3. [HttpPost]和[AcceptVerbs(HttpVerbs.Post)]区别
  4. The Installation and Compilation of OpenCASCADE
  5. ORACLE 自定义聚合函数
  6. css3 Gradient背景
  7. POJ3169 Layout
  8. 深入浅出Redis01安装
  9. 封装pdo单例模式类
  10. java.util.zip对zip文件解压
  11. 移动端类似IOS的滚动年月控件(需要jQuery和iScroll)
  12. Asp.net MVC 自定义路由在IIS7以上,提示Page Not Found 解决方法
  13. Http Statis 500 -错误笔记
  14. WEB.xml配置文件解读
  15. 使用bootstrap时遇到的问题及解决办法
  16. 键盘皇者 RealForce 104Pro独家评测
  17. JAVA_SE基础——36.static的实际应用
  18. Floyd 算法求多源最短路径
  19. [转]matplotlib - plt.rcParams、matshow/cmap/坐标轴设置
  20. JavaScriptConverter

热门文章

  1. SQL Server on Ubuntu
  2. Laya for...in和for each...in
  3. .NET重构(二):ArrayList,List,IList的联系和区别
  4. 九度oj 题目1398:移动次数
  5. 在LoadRunner向远程Linux/Unix执行命令行并收集性能数据
  6. 集群高可用之lvs+keepalive
  7. linux的自启动服务脚本的(/etc/rc.d/init.d或者其链接/etc/init.d)
  8. Python logging 学习
  9. 【bzoj4804】欧拉心算 欧拉函数
  10. BZOJ3261 最大异或和 【可持久化trie树】