精华内容
下载资源
问答
  • 信号量机制

    2017-04-08 17:24:16
    使用信号量机制用来实现进程之间的同步和互斥,允许并发进程一次对一组信号量进行相同或不同的操作。每个P\V操作不限于减一或加一,而是可以加减任何整数,在进程终止时,系统可根据需要自动消除所有被进程操作过的...

    在UNIX系统V中,一个或多个信号量构成一个信号量集合。使用信号量机制用来实现进程之间的同步和互斥,允许并发进程一次对一组信号量进行相同或不同的操作。每个P\V操作不限于减一或加一,而是可以加减任何整数,在进程终止时,系统可根据需要自动消除所有被进程操作过的信号量的影响。

    关于信号量机制的数据结构、操作函数等基础知识请自行Google.下面给出一个信号量的使用实例

    功能:用于进程互斥共享文件的信号量的使用

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/wait.h>
    #include <linux/sem.h>
    #define NUM_PROCS 5
    #define SEM_ID 250
    #define FILE_NAME "/tmp/sem_MUTEX"
    #define DELAY 400000
    //各子进程互斥写文件的通用函数
    void update_file(int sem_set_id,char *file_name_path,int number)
    {
        struct sembuf sem_op;
        FILE *file;
    	//相当于执行P操作,申请写文件
        sem_op.sem_num = 0;
        sem_op.sem_op = -1;
        sem_op.sem_flg = 0;
        semop(sem_set_id,&sem_op,1);
    	//向文件写,写入的数据是进程的标识
        file = fopen(file_name_path,"w");
        if(file)
        {
            fprintf(file,"%d\n",number);
            printf("%d\n",number);
            fclose(file);
        }
    	//相当于执行V操作,释放文件的使用权
        sem_op.sem_num = 0;
        sem_op.sem_op = 1;
        sem_op.sem_flg = 0;
        semop(sem_set_id,&sem_op,1);
    }
    //子进程准备写文件的通用函数
    void do_child_loop(int sem_set_id,char *file_name)
    {
        pid_t pid = getpid();//得到本进程的标识
        int i;
        int j;
        for(i = 0; i < 3; i++)
        {
            update_file(sem_set_id,file_name,pid);
            for(j = 0; j < 200000; j++);//暂停一段时间
        }
    }
    int main(int argc,char * *argv)
    {
        int sem_set_id;
        int child_pid;
        union semun sem_val;
        int i;
        int rc;
    	//创建一个信号量集合,标识为255,只有一个信号量
        sem_set_id = semget(SEM_ID,1,IPC_CREAT|0600);
        if(sem_set_id == -1)
        {
            perror("main's semget error ");
            exit(1);
        }
    	//把该信号量的值设置为1
        sem_val.val = 1;
        rc = semctl(sem_set_id,0,SETVAL,sem_val);
        if(rc == -1)
        {
            perror("mian:setctl");
            exit(1);
        }
    	//建立一些子进程,以便竞争并互斥地向文件写
        for(i = 0; i <NUM_PROCS; i++)
        {
            child_pid = vfork();这里将fork改成vfork
            switch(child_pid)
            {
                case -1:
                  perror("fork()");
                  exit(1);
                case 0:
                  do_child_loop(sem_set_id,FILE_NAME);
                  exit(0);
                default:break;
            }
        }//创建子进程的循环结束
    	//父进程等待子进程结束
        for(i = 0; i < 10; i++)
        {
            int child_status;
            wait(&child_status);
        }
        printf("main is done\n");
        fflush(stdout);
        return 0;
    }
    


    展开全文
  • 2.什么是信号量机制?3.整型信号量4.记录型信号量(1)举一个生动形象的例子了解记录型信号量(2)梳理一下记录型信号量的知识点(P、V) 0.思维导图 1.为什么引入信号量机制? 为了更好的解决进程互斥与同步的...


    0.思维导图

    在这里插入图片描述

    1.为什么引入信号量机制?

    • 为了更好的解决进程互斥与同步的问题
      在这里插入图片描述

    2.什么是信号量机制?

    在这里插入图片描述

    3.整型信号量

    在这里插入图片描述

    4.记录型信号量

    在这里插入图片描述

    (1)举一个生动形象的例子了解记录型信号量
    • 一张图咱们回忆一下进程的状态
      在这里插入图片描述
    • 一个例子
      在这里插入图片描述
      在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    (2)梳理一下记录型信号量的知识点(P、V)

    在这里插入图片描述
    参考:https://www.bilibili.com/video/av70156862?p=20

    展开全文
  • 2.12信号量机制

    千次阅读 2020-04-02 13:26:28
    一,为什么要引入信号量机制 1,为了解决在双标志先检查法,进入区检查和上锁操作无法一气呵成,从而导致两个进程有可能进入临界区的问题 2,上一小节所有方案都无法实现让权等待 3,1965年,荷兰学者Dijkstra提出...

    一,为什么要引入信号量机制

    1,为了解决在双标志先检查法,进入区检查和上锁操作无法一气呵成,从而导致两个进程有可能进入临界区的问题

    2,上一小节所有方案都无法实现让权等待

    3,1965年,荷兰学者Dijkstra提出了一种很好非方法实现进程互斥,同步的方法——信号量机制

     

    二,信号量机制:

    1,什么是信号量机制?

    用户可以通过系统提供的一对源语来对信号量进行操作,从而很方便的实现进程互斥,进程同步

    2,什么是信号量?

    信号量其实就是一个变量(可以是整数,也可以是更复杂的记录型变量),可以用一个信号量来表示系统中的某种资源的数量,比如:系统中有一台打印机就可以设置设置初值为1的信号量

    3,什么是源语?

    原语是一种特殊的程序段,它的执行只能一气呵成,不可以被中断。原语是由关/开中断实现的。上一小节中软件解决方案的主要问题是由“进入区各种操作无法一气呵成导致的”,因此如果能把进入区,退出区的操作都用原语来实现,这些操作能一气呵成就可以避免问题

    一对原语:wait(S)原语和signal(S)原语,可以把原语理解为我们写的函数,函数名分别为wait和signal,括号里面的S就是函数调用时传入的参数。

    wait,signal原语简称P,V操作。因此,做题的时候把wait(S)和signal(S)操作写成P(s)和V(s)

     

    三,整形信号量

    1,用一个整形变量作为信号量,数值表示某种资源数

    2,整形信号量与普通信号量的区别:对信号量只能执行初始化,片P,V三种操作

    3,整形信号量存在的问题:不满足让权等待原则

    二,记录型信号量

    1,S.value表示某种资源的数目,S.L指向等待该资源的队列

    2,P操作中,一定是先S.value--,之后可能执行block原语

    3,V操作中,一定是先S.value++,之后可能执行weakup原语

    4,注意:要能够自己判断什么条件下需要执行block原语或weakup原语

                    P操作中如果S.value--之后,S.value<0,表示没有资源了,执行block进行自我堵塞,防止忙等

                    V操作中如果S.value++之后,S.value<=0,表示堵塞队列中有进程在等待该资源,执行weakup原语唤醒队头的进程

    5,可以用记录型信号量实现系统资源 的申请和释放

    6,可以用记录型信号量实现进程的互斥,同步

    展开全文
  • 信号量机制实现进程互斥

    千次阅读 2019-07-13 16:50:16
    2.信号量机制实现进程互斥 3.信号量机制实现进程同步 4.信号量机制实现前驱关系 5.小结 1.总览 2.信号量机制实现进程互斥 3.信号量机制实现进程同步 4.信号量机制实现前驱关系 5.小结 ...

    目录

    1.总览

    2.信号量机制实现进程互斥

    3.信号量机制实现进程同步

     4.信号量机制实现前驱关系

    5.小结


    1.总览

    2.信号量机制实现进程互斥

    3.信号量机制实现进程同步

     4.信号量机制实现前驱关系

    5.小结

    展开全文
  • GCD的信号量机制

    千次阅读 2019-09-03 23:19:48
    GCD 通过信号量机制 来控制并发. 即dispatch_semaphore. 信号量是一个整型值,并且具有一个初始值,并且支持信号通知和等待. 当一个信号量被信号通知,其计数会被增加. 大概一个线程在一个信号量上等待时,线程会被...
  • 一、信号量机制 1.1 背景 1.2 整型信号量 1.3 记录型信号量  1.4 AND型信号量 1.5 信号量集 一、信号量机制 1.1 背景 1965年,荷兰学者Dijkstra、计算机先驱之一提出的信号量机制(semaphores)机制是一种...
  • iOS 信号量机制

    2018-09-14 17:28:05
    使用gcd的同学大都知道ios中开辟线程,...也许有的同学会认为添加线程锁让线程处于加锁状态下运行,这样的确可用控制,但是gcd的控制就需要使用gcd特有的处理方式,也就是今天所说的信号量机制。通过信号量来严格控...
  • 操作系统之信号量机制

    千次阅读 2019-03-03 21:26:07
    一、信号量 百度百科:信号量(Semaphore)是在多线程环境下使用的一种设施,是可用来保证两...二、信号量机制 1、整型信号量机制 它的值只能通过两个特定的原子操作wait和signal来改变,经典的PV操作。 v...
  • 进程同步之信号量机制(pv操作)

    千次阅读 2018-06-13 20:04:03
    1.信号量机制信号量机制即利用pv操作来对信号量进行处理。什么是信号量?信号量(semaphore)的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程。信号量的值与相应资源的使用情况有关。当它的值大于0...
  • 信号量机制实现进程互斥2.信号量机制实现进程同步3.信号量机制实现前驱关系 0.思维导图 在看此小结内容之前,需熟悉这一篇博客里面的知识,关于P、V操作内部实现原理等...
  • 文章目录1 信号量机制1.1 整形信号量1.2 记录形信号量1.3 信号量机制小结2 用信号量机制实现进程互斥、同 步、前驱关系2.1 信号量机制实现进程互斥2.2 信号量机制实现进程同步2.3 信号量机制实现前驱关系2.4 信号量...
  • 并发编程基础-信号量机制

    千次阅读 2019-04-16 06:53:50
    信号量机制包含以下几个核心概念: 信号量S,整型变量,需要初始化值大于0 P原语,荷兰语Prolaag(probeer te verlagen),表示减少信号量,该操作必须是原子的 V原语,荷兰语Verhogen,表示增加信号量,该操作必须是...
  • 进程同步-信号量机制

    2019-01-03 20:35:10
    1、整型信号量 除初始化外,仅能通过两个标准的原子操作wait(S)和signal(S)来访问,很长时间以来,这两个操作一直被称为P、V操作,wait和signal操作可...在整型信号量机制中的wait操作,只要是信号量S&lt;=0...
  • 信号量机制解决生产者--消费者问题

    千次阅读 2016-05-25 22:39:48
    信号量机制解决生产者--消费者问题  qianghaohao(Xqiang)  以图片的形式总结了下信号量机制解决生产者--消费者问题的过程.其中  涉及到了信号量,PV原语,死锁等关键字。  稍微解释下PV原语:PV原语就是一...
  • Linux信号量机制及编程

    千次阅读 2013-08-29 18:15:45
    1965年,荷兰学者Dijkstra提出了利用信号量机制解决进程同步问题,信号量正式成为有效的进程同步工具,现在信号量机制被广泛的用于单处理机和多处理机系统以及计算机网络中。 信号量S是一个整数,S大于等于零是...
  • 信号量机制(记录型)

    千次阅读 2018-01-29 03:25:37
    信号量机制是一种卓有成效的进程互斥同步工具。这里只介绍记录型信号量机制,它可以有效的解决CPU“忙等”的问题,实现互斥。     记录型信号量机制的数据结构如下(看不懂那些字母是什么其实没有关系):...
  • IPC(进程间通信) | 信号量机制

    千次阅读 2019-04-19 19:39:02
    进程间的通信 进程间的通信有以下几种方式: 1. 管道:管道分为有名管道和无名管道 2. 信号量:通过控制多个进程对临界资源的访问,使得同一时刻只...本文主要讲通过信号量机制进行进程同步 什么是信号量?信...
  • ios GCD之信号量机制

    千次阅读 2017-03-03 19:14:50
    一,什么是信号量机制  抽象说:  信号量是一个整型值并且具有一个初始计数值,并且支持两个操作:信号通知和等待。当一个信号量被信号通知,其计数会被增加。当一个线程在一个信号量上等待时,假如此时的信号...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 190,822
精华内容 76,328
关键字:

信号量机制