• 信号量互斥,王明学learn


                      信号量互斥

      信号量(又名:信号灯)与其他进程间通信方式不大相同,主要用途是保护临界资源(进程互斥)。进程可以根据它判定是否能够访问某些共享资源。除了用于访问控制外,还可用于进程同步。

    一、信号量分类

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

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

    二、函数学习

    2.1创建/打开信号量

    2.1.1 函数名       

      semget

    2.1.2 函数原形

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

    2.1.3 函数功能

      获取信号量集合标示符

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

    2.1.4 所属头文件

      <sys/types.h>  <sys/ipc.h>   <sys/sem.h>

    2.1.5 返回值

      成功:返回信号量集合的表示符

      失败:-1

    2.1.6 参数说明

      key:键值

      nsems:创建的这个信号量集合里面包含的信号量数目

      semflg:标志,可以取IPC_CREAT

    2.2指定键值

       系统建立IPC通讯(进程间通信)必须指定一个ID值 。

    1.任意指定一个数

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

    2. 构造一个尽量不会被别的IPC对象用到的数

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

    2.2.1 函数名

      ftok

    2.2.2 函数原形

      key_t ftok( char * fname, int id )

    2.2.3 函数功能

      构造一个尽量不会被别的IPC对象用到的数

    2.2.4 所属头文件

      <sys/types.h><sys/ipc.h>

    2.2.5 返回值

      键值

    2.2.6 参数说明

      fname就是指定的文件名(已经存在的文件名)

      id是子序号。虽然是int类型,但是只使用8bits(1-255)。

    2.3操作信号量

    2.3.1 函数名

      semop

    2.32 函数原形

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

    2.3.3 函数功能

      操作信号量集合里面的信号量

    2.3.4 所属头文件

      <sys/types.h><sys/ipc.h><sys/sem.h>

    2.3.5 返回值

      成功:0

      失败:-1

    2.3.6 参数说明

      int semid:要操作的信号量集合的标示符

      struct sembuf *sops:要操作多个信号量

      unsigned nsops:对信号量执行什么样的操作

  • 相关阅读:
    asp.net web生命周期
    图的数据结构1
    最长公共子串
    内部排序

    棋盘覆盖问题
    队列
    矩阵连乘问题
    图的数据结构2
    旅行售货员问题
  • 原文地址:https://www.cnblogs.com/wmx-learn/p/5302907.html
Copyright © 2020-2023  润新知