首页 > 技术文章 > 信号量互斥编程

lvxiaoning 2015-11-13 15:05 原文

信号量互斥

一。公示栏问题

  1.问题描述

  2.问题程序化

  3.信号量概念

    (1)信号量分类

       二值信号灯:信号灯的值只能是取0或1

       计数信号灯:信号灯的值可以取任意非负值

二。函数学习

  1.创建/打开信号量

    函数名       semget   

    函数原型      int semget (key_t key ,int nsems,int semflg)

    函数功能      获取信号量集合的标示符

              当key所指定的信号量不存在的时候,并且semflg包含了IPC_CREAT,这个时              候,就会创建一个信号量集合

    函数头文件     <sys/type.h><sys/ipc.h><sys/sem.h>

    函数返回值     成功时:返回信号量集合的标示符

              失败时:返回的-1

    函数参数类型    key: 键值     

              nsems:标志:可以取IPC_CREAT 

              semflg:创建的这个信号量集合中包含的信号量的数目

    (2)指定键值

      1.任意指定一个数

       缺点:这个数已经被别的IPC对象(消息队列,共享内存)所使用了,在与新创建的信号量关联就会失败

      2.构造一个尽量不会被别的IPC对象所用数的方法:

       使用key_t ftok(char *fname ,int id)

  2.操作信号量    

    函数名       semop

    函数原型      int semop(int semid, struct sembuf*sops,unsigned nsops)

    函数功能      操作信号量

    函数头文件     <sys/sem.h><sys/type.h><sys/ipc.h>

    函数返回值     成功:0

              失败:-1

    函数参数类型    semid: 要操作的信号量集合的标示符

              sembuf *sops:对信号量执行什么样的操作

              nsops:要操作多少个信号量

 

 

推荐阅读