首页 > 代码库 > 使用IPC_PRIVATE信号量简单的例子
使用IPC_PRIVATE信号量简单的例子
Linux 信号量的API都定义在sys/sem.h头文件中,主要包含3个系统调用:semget、semop、semctl。
附上代码:
#include <sys/sem.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/wait.h> union semun { int val; struct semid_ds* buf; unsigned short int* array; struct seminfo* __buf; }; void pv( int sem_id, int op ) { struct sembuf sem_b; sem_b.sem_num = 0; sem_b.sem_op = op; sem_b.sem_flg = SEM_UNDO; semop( sem_id, &sem_b, 1 ); } int main( int argc, char* argv[] ) { int sem_id = semget( IPC_PRIVATE, 1, 0666 ); union semun sem_un; sem_un.val = 1; semctl( sem_id, 0, SETVAL, sem_un ); pid_t id = fork(); if( id < 0 ) { return 1; } else if( id == 0 ) { printf( "child try to get binary sem\n" ); pv( sem_id, -1 ); printf( "child get the sem and would release it after 5 seconds\n" ); sleep( 5 ); pv( sem_id, 1 ); exit( 0 ); } else { printf( "parent try to get binary sem\n" ); pv( sem_id, -1 ); printf( "parent get the sem and would release it after 5 seconds\n" ); sleep( 5 ); pv( sem_id, 1 ); } waitpid( id, NULL, 0 ); semctl( sem_id, 0, IPC_RMID, sem_un ); return 0; }
使用IPC_PRIVATE信号量简单的例子
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。