• 第14课-信号互斥编程


    1.产生背景:有些资源呗多个进程同时访问的时候,可能出现数据混乱的现象
    2.定义:信号量有名信号灯。主要是用来保护临界资源(进程互斥)。进程可以根据他判定是否可以访问临界资源。还可以用于进程同步。
    实质:一个数字
    操作:获取和释放。利用信号量的值判断是否可以操作,大于0可以。0不可以。所以在创建操作之前一般要保证初始值是1.可以使用semctl函数来获取和设置初始值。
    3.分类:
    (1)二值信号量:信号灯的值只能是0和1
    (2)计数信号量:信号灯的值可以取任意非负值
    4.和文件的区别
    (1)打开信号量得到标识符
    (2)利用标识符操作信号量
    5.键值:类似于文件名,要打开一个文件你要知道她的文件名,所以要打开一个信号量要知道他所属的键值。
    键值指向一个信号量集合。
    性质:就是一个数字,在打开信号量之前就有了。
    作用:表明信号量。
    指定键值:
    (1)任意选择一个数
    有可能被其他IPC对象用了,所以无效。
    (2)ftok函数(文件名(实质是数字),项目ID)
    利用文件名(Linux内核指定实际数字)和项目ID共同构造信号量集合的键值。返回的是key_t类型。
    5.函数学习:

    8.1 创建/打开信号量集合

    8.1.1 函数名
    Semget
    8.1.2 函数原形
    int semget(key_t key, int nsems, int semflg);
    8.1.3 函数功能
    获取信号量集合的标识符
    当key所指定的的信号量不存在的时候,且semflg里面包含了IPC_CREAT,则会创建一个信号量集合
    8.1.4 所属头文件
    <sys/types.h>
    <sys/ipc.h>
    <sys/sem.h>
    8.1.5 返回值
    成功:信号量集合标识符
    失败:-1
    8.1.6 参数说明
    Key键值(对应于信号量集合)
    Nsems创建的信号量集合里包含的信号量数目。
    Semflg标志,可以取IPC_CREAT标志。
    8.1.7 范例代码

    8.2 操作信号量

    8.2.1 函数名
    Semop
    8.2.2 函数原形
    int semop(int semid, struct sembuf *sops, unsigned nsops);
    8.2.3 函数功能
    操作信号量
    8.2.4 所属头文件
    <sys/types.h>
    <sys/ipc.h>
    <sys/sem.h>
    8.2.5 返回值
    成功:0
    失败:-1
    8.2.6 参数说明
    Semid要操作的信号量集合的标志符(由semget返回的)
    Sops执行什么操作(实质是一个数组,长度由Nsops指定
    unsigned short sem_num;指明要操作哪一个信号量
    short          sem_op; 正数就是释放,负数就是获取
    short          sem_flg;不关心
    Nsops要操作多少信号量




    6.具体操作
    (0)创建键值(两个进程都要指定键值,只要知道文件名和项目ID即可。)
    (1)创建并打开信号量,返回int(如果已存在,则不会再次创建)
    (2)打开文件
    (3)获取信号量,获取失败则等待就是用操作信号量函数。注意对sops结构体的定义。
    (4)访问文件(资源)
    (5)释放信号量
    (6)关闭文件

  • 相关阅读:
    R语言对苏格兰独立民意调查的Meta分析
    R语言中固定与随机效应Meta分析
    Comet OJ
    luoguP6070 [MdOI2020] Decrease 贪心+二维差分
    luoguP6071 [MdOI2020] Treequery DFS序+主席树
    AT2064 [AGC005F] Many Easy Problems 容斥+NTT
    BZOJ 4650: [Noi2016]优秀的拆分 后缀自动机+启发式合并+线段树合并
    BZOJ 1498: [NOI2006]神奇的口袋 性质分析+高精度
    BZOJ 1819: [JSOI]Word Query电子字典 搜索+trie
    robotframework 随机选中下拉框中的值
  • 原文地址:https://www.cnblogs.com/YanfeiHao/p/4433013.html
Copyright © 2020-2023  润新知