zoukankan      html  css  js  c++  java
  • 第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)关闭文件

  • 相关阅读:
    selenium开发-C#/java/Python
    Web循环监控Java调用 / Java调用.net wcf接口
    网站循环加载监控-C#
    串口通信分析
    windows环境jar包部署到linux服务器,一键操作
    windows环境jar包部署到linux服务器,一键操作(帮助说明)
    Git+TortoiseGit使用帮助
    安装Docker
    MySQL报错信息:Warning: (1366, "Incorrect string value: '\xD6\xD0\xB9\xFA\xB1\xEA...' for column 'VARIABLE_VALUE' at row 489")
    txt文档中文乱码
  • 原文地址:https://www.cnblogs.com/YanfeiHao/p/4433013.html
Copyright © 2011-2022 走看看