精华内容
下载资源
问答
  • 《小狗争食之互斥

     同步(互斥是同步的一种)是一种理念,而实现这种理念的有2种方式:信号量(整型信号量,结构型信号量,二值信号量);管道(pipe)。

    注:例子便于记忆。

    《小狗争食之互斥》

    饭点时间到了,小狗A(进程A或线程A)与小狗B(进程B或线程B)都冲向放有狗粮(临界资源,可以说一个变量i等等)的狗屋(临界资源区),小狗A(进程A或线程A)先冲到狗屋(临界资源区),而狗屋(临界资源区)只能容纳一只小狗,所以小狗A(进程A或线程A)先吃,小狗B(进程B或线程B)只能在狗屋(临界资源区)外等待,直到屋里小狗A(进程A或线程A)吃完狗粮(临界资源)。这就是互斥,互斥是关于共享资源的,关于竞争的,而共享资源在同一时间只能有一个进程享用它。那代码如何实现互斥?pv信号量。

    《软件开发之同步》

    有一间公司,要开发一个名为“同步”的软件,开发软件先写文档后写代码,所以该公司的经理(进程A)开始着手写文档,经理(进程A)写完文档后,会把文档放在一个盒子(缓冲区,管道等)里,程序员(进程B)就可以去盒子(缓冲区,管道等)里拿文档,然后根据文档写代码。经理(进程A)只有写完文档(进程A运行完),程序员才能能拿到文档去写代码(进程B才能运行),经理和程序员是合作关系。这就是同步,同步是两个进程合作的、协作的,它们的运行必须严格按照规定的 某种先后次序来运行只有上游进程A提供了资源,下游进程B才能拿到资源,典型的例子还有生产者-消费者。


    总结:同步是一种更为复杂的互斥,而互斥是一种特殊的同步。


    临界区、互斥区、事件、信号量四种方式:(转)

    http://www.cnblogs.com/memewry/archive/2012/08/22/2651696.html

    展开全文
  • 互斥与同步

    千次阅读 2018-05-31 00:31:08
     (2) 了解互斥体对象,利用互斥与同步操作编写生产者-消费者问题的并发程序,加深对 P (即semWait)、 V(即 semSignal)原语以及利用 P、 V 原语进行进程间同步与互斥操作的理解。 二、总体设计2.1 设计步骤(1)...

    一、实验目的

        (1) 回顾操作系统进程、线程的有关概念,加深对 Windows 线程的理解。

    展开全文
  • 进程的互斥与同步

    2016-11-30 14:43:09
    利用Windows提供的API函数,编写程序,解决生产者消费者问题,实现进程的互斥与同步
  • 什么叫做互斥与同步,为什么要引入互斥与同步机制 互斥:是指散步在不同任务之间的若干程序片断,当某个任务运行其中一个程序片段时,其它任务就不能运行它们之中的任一程序片段,只能等到该任务运行完这个程序...

    什么叫做互斥与同步,为什么要引入互斥与同步机制

    • 互斥:是指散步在不同任务之间的若干程序片断,当某个任务运行其中一个程序片段时,其它任务就不能运行它们之中的任一程序片段,只能等到该任务运行完这个程序片段后才可以运行。最基本的场景就是:一个公共资源同一时刻只能被一个进程或线程使用,多个进程或线程不能同时使用公共资源。

    • 同步:是指散步在不同任务之间的若干程序片断,它们的运行必须严格按照规定的某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。最基本的场景就是:两个或两个以上的进程或线程在运行过程中协同步调,按预定的先后次序运行。比如 A 任务的运行依赖于 B 任务产生的数据。

    • 引入互斥与同步机制原因:
      现代操作系统基本都是多任务操作系统,即同时有大量可调度实体在运行。在多任务操作系统中,同时运行的多个任务可能:

      1. 都需要访问/使用同一种资源
      2. 多个任务之间有依赖关系,某个任务的运行依赖于另一个任务

      这两种情形是多任务编程中遇到的最基本的问题,也是多任务编程中的核心问题,同步和互斥就是用于解决这两个问题的。

    展开全文
  • 进程间互斥与同步

    千次阅读 2017-05-15 22:18:21
    进程间互斥与同步实验题目:进程间的互斥与同步 实验内容:编写算法,实现进程间对临界资源的互斥访问以及进程间的同步关系 实验要求: 1、要求进程互斥使用文本文件; 2、假定文本文件txt1最大可写入30个字符; ...

    进程间互斥与同步

    实验题目:进程间的互斥与同步
    实验内容:编写算法,实现进程间对临界资源的互斥访问以及进程间的同步关系
    实验要求:
    	1、要求进程互斥使用文本文件;
    	2、假定文本文件txt1最大可写入30个字符;
    	3、写满后复制进程将文本文件的内容复制到另一个文本文件txt2中(无长度限制)。
    	4、复制进程复制完毕写入进程可再重新写入, 重复执行3,4,直到给出停止命令。
    	5、实现进程间的同步和互斥。
    

    –更新临界区控制,mutex–

    • code:
    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<unistd.h>
    #include<sys/sem.h>//信号量
    #include<errno.h>
    using namespace std;
    typedef union _semnu{
    	int val;
    	struct semid_ds *buf;
    	ushort *array;
    }semun;
    //v操作
    void v(int &sem_id)
    {
    	struct sembuf sem_b;
    	sem_b.sem_num=0;
    	sem_b.sem_op=1;
    	sem_b.sem_flg=SEM_UNDO;
    	if(semop(sem_id,&sem_b,1)==-1)
    	{
    		cout<<"error"<<endl;
    		exit(0);
    	}
    }
    //p操作
    void p(int &sem_id)
    {
    	struct sembuf sem_b;
    	sem_b.sem_num=0;
    	sem_b.sem_op=-1;
    	sem_b.sem_flg=SEM_UNDO;
    	if(semop(sem_id,&sem_b,1)==-1)
    	{
    		cout<<"error"<<endl;
    		exit(0);
    	}
    }
    //设置信号量初值
    void set(int sem_id,int val=1)
    {
    	semun sem_un;
    	sem_un.val=val;
    	if(semctl(sem_id,0,SETVAL,sem_un)==-1)
    	{
    		if(errno==EEXIST)
    		  cout<<"exist"<<endl;
    	  cout<<"set"<<val<<"error"<<endl;
    	  exit(0);
    	}
    }
    void del(int sem_id)
    {
    	semun sem_un;
    	if(semctl(sem_id,0,IPC_RMID,sem_un)==-1)
    	  cout<<"error"<<endl;
    }
    int main()
    {
        //互斥量
    	int sem_mutex=semget((key_t)8888,1,IPC_CREAT);
    	set(sem_mutexk,1);
    	
    	int sem_full=semget((key_t)1234,1,IPC_CREAT);
    	cout<<sem_full<<endl;
    	//set semaphore full
    	set(sem_full,0);
    	int sem_empty=semget((key_t)1235,1,IPC_CREAT);
    	cout<<sem_empty<<endl;
    	//set semaphore emtpy
    	set(sem_empty,1);
    	FILE *fp1=fopen("./txt1","w");
    	FILE *fp2=fopen("./txt1","r");
    	FILE *fp3=fopen("./txt2","w");
    	
    	pid_t id=fork();
    	if(id>0)//parent
    	{
    		//produce
    		//p(empty)
    		//
    		//v(full)
    		for(int i=0;i<5;i++)
    		{
    			p(sem_empty);
    			p(sem_mutex);//锁定临界区
    			cout<<"writing...             "<<i<<endl;
    			fseek(fp1,0,SEEK_SET);
    			fputs("QWERTYUIOPASDFGHJKLZXCVBNM1234",fp1);
    			fflush(fp1);
    			sleep(1);
    			cout<<"write done"<<endl;
    			v(sem_mutex);
    			v(sem_full);
    		}
    		fclose(fp1);
    		cout<<"txt2:"<<endl;
    		system("cat txt2 \n");
    	}else if(id==0)
    	{
    		//consume
    		//p(full)
    		//
    		//v(empty)
    		
    		char buf[32];
    		buf[31]='\0';
    		fill(buf,buf+20,0);
    		for(int i=0;i<5;i++)
    		{
    			p(sem_full);
    			p(sem_mutex);//锁定临界区
    			cout<<"reading...             "<<i<<endl;
    			fseek(fp2,0,SEEK_SET);
    			fgets(buf,30,fp2);
    			fputs(buf,fp3);
    			fflush(fp3);  //由于缓冲方式的影响,30个字符不会立刻读取到buf中,需要fflush
    			cout<<buf<<endl;
    			cout<<"read  done"<<endl;
    			cout<<endl;
    			sleep(1);
    			v(sem_mutex);
    			v(sem_empty);
    		}
    		fclose(fp2);
    		fclose(fp3);
    		exit(0);
    	}else//error
    	{
    		
    		cout<<"创建子进程失败!"<<endl;
    		exit(0);
    	}
    //	del(sem_full);
    //	del(sem_empty);
    	return 0;
    }
    
    • output:
    //注意要以root用户运行程序
    
    	196608
    	229377
    	writing...             0
    	write done
    	reading...             0
    	QWERTYUIOPASDFGHJKLZXCVBNM123
    	read  done
    
    	writing...             1
    	write done
    	reading...             1
    	QWERTYUIOPASDFGHJKLZXCVBNM123
    	read  done
    
    	writing...             2
    	write done
    	reading...             2
    	QWERTYUIOPASDFGHJKLZXCVBNM123
    	read  done
    
    	writing...             3
    	write done
    	reading...             3
    	QWERTYUIOPASDFGHJKLZXCVBNM123
    	read  done
    
    	writing...             4
    	write done
    	txt2:
    	reading...             4
    	QWERTYUIOPASDFGHJKLZXCVBNM123
    	read  done
    
    展开全文
  • 80-多线程互斥与同步

    千次阅读 2017-03-10 09:56:52
    线程互斥与同步;竞态错误的原因;互斥与同步区别
  • 一、互斥与同步 互斥是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。 同步是指在互斥的基础上(大多数情况),通过其它机制实现访问...
  • 本文将说明如何使用信号量实现线程之间的互斥与同步互斥锁只有0,1两中状态,适合于线程对共享资源的独占访问,很多时候每个资源可以同时被有限的线程访问,此时互斥锁将无法满足;条件变量同步也同样存在这种问题...
  • 线程的互斥与同步

    2020-07-19 21:53:06
    线程的互斥与同步 互斥: ​ 当多个线程访问同一个全局变量,或者同一个资源(比如打印机)的时候,需要进行线程间的互斥操作来保证访问的安全性. ​ 临界区、互斥体、事件和信号量都可以实现线程互斥.但...
  • vxWorks smp架构下互斥与同步

    千次阅读 2018-09-19 11:29:29
    SMP提供四中同步与互斥锁: 任务中断级的spinLock 任务中断级CPU指定 原子操作 内存屏障 1、spinLock的互斥与同步 UP(单核)中的信号量用于任务的互斥与同步在SMP中同样适用,而spinLock则是SMP中...
  • 进程互斥与同步区别

    千次阅读 2013-06-03 18:16:46
    相交进程之间的关系主要有两种,同步与互斥。所谓互斥,是指散布在不同进程之间的若干程序片断,当某个进程运行其中一个程序片段时,其它进程就不能运行它 们之中的任一程序片段,只能等到该进程运行完这个程序片段...
  • 第3章 并发控制-互斥与同步 对于操作系统有系统的分析
  • 相交进程之间的关系主要有两种,同步与互斥。所谓互斥,是指散步在不同进程之间的若干程序片断,当某个进程运行其中一个程序片段时,其它进程就不能运行它 们之中的任一程序片段,只能等到该进程运行完这个程序片段...
  • 进程互斥与同步应用于排课管理的教学初探,彭小娟,许丽娟,进程互斥与同步是操作系统课程中的一个重要知识点,抽象且学生较难理解;排课管理是我院教务工作中的一个难点。本文介绍了进程互
  • 1inux操作系统中互斥与同步控制.pdf
  • linux内核互斥与同步

    2014-04-27 13:48:34
    本文将按照自己之前对linux内核互斥与同步的学习和

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 165,775
精华内容 66,310
关键字:

互斥与同步的区别