码迷,mamicode.com
首页 > 其他好文 > 详细

信号量(sem)

时间:2016-04-19 20:15:37      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:linux   sem   信号量   

一、信号量:(数据操作锁)控制进程间互斥、同步等,协调多个程序同时访问一个共享资源。

    工作原理:信号量只能有两种操作等待和操作,即:P V操作,必须是原子操作。

              P(sv):如果 sv 的值大于零就减一;如果它的值为零,就挂起;

              V(sv):如果有被挂起的,恢复运行,如果没有就加一。

二、函数原型:

    int semget(key_t key, int nsems,int semflg);

    int semop(int semid,struct sembuf *sops,size_t nsops);

    int semctl(int semid, int semnum, int cmd, ...);

    /*    

     *    semid:信号量集的标识符;    semnum:第几个信号量;

     *    cmd:需要执行的命令,根据命令的不同,函数有三个或四个参数(union)

     */

     cmd:IPC_RMID,立即删除信号集,唤醒被阻塞的进程;

     cmd:SETVAL,设置信号量集中的一个单独的信号量的值。

     cmd:GETALL用于读取信号量集中的所有信号量的值。

     union semun

     {

         int val;

         struct semid_ds *buf;

         unsigned short *array;

         struct seminfo *_buf;

      };//用户需自己定义声明


三、代码实现:



四、实现结果:






信号量(sem)

标签:linux   sem   信号量   

原文地址:http://green906.blog.51cto.com/10697569/1765467

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!