进程间通信-信号量
2017-10-08 15:19
148 查看
信号量的操作:
1.创建或者获取:semget()
int semget(key_t key, int num_sems,
int sem_flags );
第一个参数是整数值,不相关的进程可以通过它访问同一个信号量;
第二个参数指定需要的信号量数目,基本取值为1;
第三个参数则是一组标志,它与open函数的标志非常相似,如果该函数创建出的信号量已存在,则返回一个错误。
2.初始化(删除):semctl()
int semctl(int sem_id, int sem_num, int command, ......);
第一个参数sem_id是semget函数返回的信号量标识符;
第二个参数是信号量编号,一般取值为0,表示这是第一个也是唯一一个信号量;
第三个参数是将要采取的动作,例如SETVAL表示把信号量初始化一个已知的值,而IPC_RMID则是删除一个已经无法使用的信号量标识符;
如果有第四个参数,则是一个联合体结构,需要程序员自己定义。
3.PV操作:semop()
semop函数的一切动作都是一次性完成。
semop函数用于改变信号量的值:int semop(int sem_id, struct sembuf *sem_ops, size_t num_sem_ops);
第一个参数sem_id是semget函数返回的信号量标识符;
第二个参数sem_ops是指向一个结构数组的指针,每个数组元素至少包含以下几个成员:
依次为信号量编号(除非使用,否则一般为0),信号量在操作中需要改变的数值(P操作(-1),等待信号量变为可用;V操作(+1),发送信号量表示信号量现在可用);操作系统跟踪当前进程对这个信号量的修改情况(一般情况被设置为SEM_UNDO,如果此进程在没有释放信号量的情况下终止,则操作系统自动释放该进程的信号量)。
第三个参数表示信号量的个数。
1.创建或者获取:semget()
int semget(key_t key, int num_sems,
int sem_flags );
第一个参数是整数值,不相关的进程可以通过它访问同一个信号量;
第二个参数指定需要的信号量数目,基本取值为1;
第三个参数则是一组标志,它与open函数的标志非常相似,如果该函数创建出的信号量已存在,则返回一个错误。
2.初始化(删除):semctl()
int semctl(int sem_id, int sem_num, int command, ......);
第一个参数sem_id是semget函数返回的信号量标识符;
第二个参数是信号量编号,一般取值为0,表示这是第一个也是唯一一个信号量;
第三个参数是将要采取的动作,例如SETVAL表示把信号量初始化一个已知的值,而IPC_RMID则是删除一个已经无法使用的信号量标识符;
如果有第四个参数,则是一个联合体结构,需要程序员自己定义。
3.PV操作:semop()
semop函数的一切动作都是一次性完成。
semop函数用于改变信号量的值:int semop(int sem_id, struct sembuf *sem_ops, size_t num_sem_ops);
第一个参数sem_id是semget函数返回的信号量标识符;
第二个参数sem_ops是指向一个结构数组的指针,每个数组元素至少包含以下几个成员:
struct sembuf{ short sem_num; short sem_op; short sem_flag; }
依次为信号量编号(除非使用,否则一般为0),信号量在操作中需要改变的数值(P操作(-1),等待信号量变为可用;V操作(+1),发送信号量表示信号量现在可用);操作系统跟踪当前进程对这个信号量的修改情况(一般情况被设置为SEM_UNDO,如果此进程在没有释放信号量的情况下终止,则操作系统自动释放该进程的信号量)。
第三个参数表示信号量的个数。
相关文章推荐
- 进程间通信机制(管道、信号、共享内存/信号量/消息队列)、线程间通信机制(互斥锁、条件变量、posix匿名信号量)
- linux高级编程基础系列:System V进程间通信(信号量、共享内存)
- 进程间通信机制之二:信号量
- 进程间通信--信号量
- 进程间通信 "共享内存" 与 “信号量”的使用
- 代码干货 | perl信号量实现进程间通信
- Linux进程间通信之信号量
- Linux进程间通信——使用信号量
- 进程间通信(IPC)——信号量、共享内存、消息队列
- 进程间通信(IPC)4 ------ 共享内存(配合使用信号量进行同步)
- 进程间通信:通俗理解信号量方式
- 进程间通信与同步---共享内存和信号量编程简介
- 进程间通信——消息传递(信号量同步PV操作)
- 进程间通信(IPC)之――――信号量
- 【Linux】进程间通信——信号量
- 进程间通信-信号量详解及编程实例
- 进程间通信——信号量、互斥锁等的异同
- 多进程编程之进程间通信-共享内存,信号量和套接字
- Linux C编程--进程间通信(IPC)5--System V IPC 机制2--信号量
- Linux进程间通信—使用信号量