linux的信号量通信
来源:互联网 发布:怎么学习电脑编程 编辑:程序博客网 时间:2024/06/05 08:09
查看共享信息的内存的命令是ipcs [-m|-s|-q] (全部的话是ipcs -a) ;查看共享信息的内存的命令是ipcs [-m|-s|-q]
信号量是一个特殊的变量,程序对其访问都是原子操作,且只允许对它进行等待(即P(信号变量))和发送(即V(信号变量))信息操作。最简单的信号量是只能取0和1的变量,这也是信号量最常见的一种形式,叫做二进制信号量。而可以取多个正整数的信号量被称为通用信号量。这里主要讨论二进制信号量.
P操作: 负责把当前进程由运行状态转换为阻塞状态,直到另外一个进程唤醒它。
操作为:申请一个空闲资源(把信号量减1),若成功,则退出;若失败,则该进程被阻塞;
V操作: 负责把一个被阻塞的进程唤醒,它有一个参数表,存放着等待被唤醒的进程信息。
操作为: 释放一个被占用的资源(把信号量加1),如果发现有被阻塞的进程,则选择一个唤醒之。
1.semget()
int semget(key_t key, int nsems, int semflg);
第一个参数 key是整数值(唯一非零),不相关的进程可以通过它访问一个信号量,它代表程序可能要使用的某个资源,程序对所有信号量的访问都是间接的,程序先通过调用semget函数并提供一个键,再由系统生成一个相应的信号标识符(semget函数的返回值),只有semget函数才直接使用信号量键,所有其他的信号量函数使用由semget函数返回的信号量标识符。如果多个程序使用相同的key值,key将负责协调工作。
第二个参数num_sems指定需要的信号量数目,它的值几乎总是1。
第三个参数sem_flags是一组标志,当想要当信号量不存在时创建一个新的信号量,可以和值IPC_CREAT做按位或操作。设置了IPC_CREAT标志后,即使给出的键是一个已有信号量的键,也不会产生错误。而IPC_CREAT | IPC_EXCL则可以创建一个新的,唯一的信号量,如果信号量已存在,返回一个错误。
semget函数成功返回一个相应信号标识符(非零),失败返回-1
2,semop()它的作用是改变信号量的值
int semop (int semid, struct sembuf *sops, unsigned nsops);
struct sembuf{ short sem_num;//除非使用一组信号量,否则它为0 short sem_op;//信号量在一次操作中需要改变的数据,通常是两个数,一个是-1,即P(等待)操作, //一个是+1,即V(发送信号)操作。 short sem_flg;//通常为SEM_UNDO,使操作系统跟踪信号, //并在进程没有释放该信号量而终止时,操作系统释放信号量};3,semctl()
int semctl(int semid, int semnum, int cmd, ...);
union semun{ int val; struct semid_ds *buf; unsigned short *arry;};
前两个参数与前面一个函数中的一样,command通常是下面两个值中的其中一个
SETVAL:用来把信号量初始化为一个已知的值。p 这个值通过union semun中的val成员设置,其作用是在信号量第一次使用前对它进行设置。
IPC_RMID:用于删除一个已经无需继续使用的信号量标识符。
参考来自:blog.csdn.net/ljianhui/article/details/10243617
0 0
- linux的信号量通信
- linux进程间的通信(C): 信号量
- linux进程间的通信--信号量同步
- linux进程间的通信: 信号量
- Linux的进程间通信-信号量
- Linux进程间的通信--信号量
- Linux进程间的通信--信号量
- Linux进程通信--信号量
- Linux进程通信-信号量
- linux通信--信号量
- linux通信之信号量
- linux进程通信---信号量
- linux进程通信--信号量
- linux进程通信--信号量
- linux进程通信-信号量
- Linux进程通信-信号量
- 信号量的通信
- Linux进程间的通信,信号量的使用,生产者消费者
- Swift学习之八:断言(Assertions)
- Search in Rotated Sorted Array II
- SVN修改用户名与密码
- iOS百度地图 定位的实现
- 百度地图 JavaScript API 极速版 开发体会
- linux的信号量通信
- 最简单的基于FFmpeg的AVfilter例子(水印叠加)
- 【C】物联网与智能家居资讯
- vmware 桥接网络
- Doom3 couldn't load default.cfg
- Django中的用户认证
- 第三周作业——冒泡排序和归并排序
- python多线程图片爬虫
- Bash Shell中命令行选项/参数处理