博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
14、posix信号量简介
阅读量:5912 次
发布时间:2019-06-19

本文共 1204 字,大约阅读时间需要 4 分钟。

sem_open(3)

initialize and open a named semaphore

sem_init(3)

initialize an unnamed semaphore

sem_wait(3)

P 操作

sem_post(3)

V 操作

sem_close(3)

close a named semaphore

sem_destroy(3)

destory an unnamed semaphore

sem_unlink(3)

remove a named semaphore

    无名信号量可以用在共享内存的情况下,比如实现进程中各个线程之间的互斥和同步。命名信号量通常用于不共享内存的情况下,比如不共享内存的进程之间。

1、有名信号量的创建

1)创建并初始化

sem_t *sem_open(const char *name, int oflag); //打开已存在

sem_t *sem_open(const char *name, int oflag, mode_t mode, unsigned int value); //创建

name用于标识信号量的名字

oflag被设置为O_CREAT用来创建一个信号量(如果和0_EXCL一起,当这个信号量已经存在时候这个调用将会失败)

mode控制新的信号量的访问权限

value指定信号量的初始化值

2)int sem_wait(sem_t *sem);

    锁住信号量,如果这个信号量的计数大于0,锁住这个信号量之后,信号量计数减一。如果这个信号量的计数是0,这个调用被阻塞。

解锁一个信号量的语义是:

3)int sem_post(sem_t *sem);

对信号量增1然后返回。

4)销毁信号量

    在退出或是退出处理函数中调用sem_unlink()去删除系统中的信号量。在sem_unlink之前,要确保所有对这个有名信号量的引用都已经通过sem_close()关闭,否则,sem_unlink()函数不会起到任何的作用。

5)有名信号灯支持进程间通信。

2、无名信号量的创建

    一个无名信号量被放置在一个被多个线程(多线程共享信号量)或是进程(多进程共享信号量)共享的内存区域。一个线程共享信号量被放置在一个只有同一个进程的线程共享它们的区域,例如一个全局的变量。一个进程共享的信号量被放置在一个不同进程可以共享它们的区域,例如一个共享内存区一个无名信号量为线程间和相关的进程间提供同步机制

1)无名信号量不需要使用sem_open调用,下面的两行代码替换了它的行为:

{

  sem_t semid;

  int sem_init(sem_t *sem, int pshared, unsigned  value);

}

示例代码见[2]

3、信号量是包含一个非负整型变量

参考

1

2

3

4

5】 不错的文档

6

转载地址:http://gfmpx.baihongyu.com/

你可能感兴趣的文章
一年多了,该回来了……
查看>>
四则运算
查看>>
Qt5 for Android: incompatible ABI
查看>>
zookeeper学习
查看>>
class类名的管理
查看>>
LeetCode:Rectangle Area
查看>>
文本查询
查看>>
查看帐号授权信息
查看>>
小程序(四):模板
查看>>
【转】Java - printf
查看>>
jquery获取元素到屏幕底的可视距离
查看>>
ENDNOTE使用方法(转发)
查看>>
计算机数制和运算的一点总结.
查看>>
UML系列 (五) 为什么要用UML建模之建模的重要性
查看>>
框架是什么,框架有什么用(转)
查看>>
集成测试
查看>>
[android] 手机卫士黑名单功能(列表展示)
查看>>
c3p0连接池配置
查看>>
对于I/O流中解压中遇到的问题
查看>>
问答项目---用户注册的那些事儿(JS验证)
查看>>