进程间通信之: 信号量

时间:2013-09-13来源:网络

3.使用实例

本实例说明信号量的概念以及基本用法。在实例程序中,首先创建一个子进程,接下来使用信号量来控制两个进程(父子进程)之间的执行顺序。

因为信号量相关的函数调用接口比较复杂,我们可以将它们封装成二维单个信号量的几个基本函数。它们分别为信号量初始化函数(或者信号量赋值函数)init_sem()、P操作函数sem_p()、V操作函数sem_v()以及删除信号量的函数del_sem()等,具体实现如下所示:

/*sem_com.c*/

#includesem_com.h

/*信号量初始化(赋值)函数*/

intinit_sem(intsem_id,intinit_value)

{

unionsemunsem_union;

sem_union.val=init_value;/*init_value为初始值*/

if(semctl(sem_id,0,SETVAL,sem_union)==-1)

{

perror(Initializesemaphore);

return-1;

}

return0;

}

/*从系统中删除信号量的函数*/

intdel_sem(intsem_id)

{

unionsemunsem_union;

if(semctl(sem_id,0,IPC_RMID,sem_union)==-1)

{

perror(Deletesemaphore);

return-1;

}

}

/*P操作函数*/

intsem_p(intsem_id)

{

structsembufsem_b;

sem_b.sem_num=0;/*单个信号量的编号应该为0*/

sem_b.sem_op=-1;/*表示P操作*/

sem_b.sem_flg=SEM_UNDO;/*系统自动释放将会在系统中残留的信号量*/

if(semop(sem_id,sem_b,1)==-1)

{

perror(Poperation);

return-1;

}

return0;

}

/*V操作函数*/

intsem_v(intsem_id)

{

structsembufsem_b;

sem_b.sem_num=0;/*单个信号量的编号应该为0*/

sem_b.sem_op=1;/*表示V操作*/

sem_b.sem_flg=SEM_UNDO;/*系统自动释放将会在系统中残留的信号量*/

if(semop(sem_id,sem_b,1)==-1)

{

perror(Voperation);

return-1;

}

return0;

}

1 2 3

关键词: 进程间通信 信号量 Linux 操作系统 semget

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版