新闻中心

EEPW首页>嵌入式系统>设计应用> 进程间通信之: 信号量

进程间通信之: 信号量

作者: 时间:2013-09-13 来源:网络 收藏

本文引用地址://m.amcfsurvey.com/article/257125.htm

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;

}

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

数字通信相关文章:数字通信原理




评论


相关推荐

技术专区

关闭