信号量基本流程下面实例演示了关于信号量操作的基本流程
程序中使用semget函数创建一个信号量集,并使用semop函数在这个信号集上执行了一次资源释放操作
并在shell中使用命令查看系统IPC的状态
(1)在vi器中该程序
程序清单14-10 create_sem.c 使用semget函数创建一个信号量#include #include #include #include #include int main( void ){int sem_id;int nsems = 1;int flags = 0666;struct sembuf buf;sem_id = semget(IPC_PRIVATE, nsems, flags); /*创建一个新的信号量集*/if ( sem_id < 0 ){perror( "semget ") ;exit (1 );}/*输出相应的信号量集标识符*/printf ( "successfully created a semaphore : %d
", sem_id );buf.sem_num = 0; /*定义一个信号量操作*/buf.sem_op = 1; /*执行释放资源操作*/buf.sem_flg = IPC_NOWAIT; /*定义semop函数的行为*/if ( (semop( sem_id, &buf, nsems) ) < 0) { /*执行操作*/perror ( "semop");exit (1 );}system ( "ipcs -s " ); /*查看系统IPC状态*/exit ( 0 );}(2)在vmware中编译该程序如下:gcc -o a.o testc_semaphore.c(3)在shell中运行该程序如下:./a3.osuccessfully created a semaphore : 0------ Semaphore Arrays --------key semid owner perms nsems0x00000000 0 zcr 666 1在上面程序中,用semget函数创建了一个信号量集,定义信号量集的资源数为1,接下来使用semop函数进行资源释放操作
在程序的最后使用shell命令ipcs来查看系统IPC的状态
%注意:命令ipcs参数-s标识查看系统IPC的信号量集状态
以上内容由大学时代综合整理自互联网,实际情况请以官方资料为准。