`
arne3166
  • 浏览: 130258 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

生产者和消费者的不同步

阅读更多
public class ConsumeInteger extends Thread
{
	private HoldIntegerUnsynchronized cHold;
	
	public ConsumeInteger(HoldIntegerUnsynchronized h)
	{
		super("ConsumeInteger    ");
		cHold=h;
	}
	
	public void run()
	{
		int val,sum=0;
		
		do
		{
			try
			{
				Thread.sleep((int)(Math.random()*10000));
			}
			catch(InterruptedException e)
			{
				System.err.println(e.toString());
			}
			
			val=cHold.getSharedInt();
			sum+=val;
		}while(val!=10);
		
		System.err.println(getName()+
		                   "retrieved values totaling:"+sum+
		                   "\nTerminating"+getName());
	}
}

 

public class HoldIntegerUnsynchronized 
{
	private int sharedInt=-1;
	
	public void setSharedInt(int val)
	{
		System.err.println(Thread.currentThread().getName()+
		                   "setting sharedInt to"+val);
		sharedInt=val;
	}
	
	public int getSharedInt()
	{
		System.err.println(Thread.currentThread().getName()+
		                   "retrieving sharedInt values"+sharedInt);
		return sharedInt;
	}
}

 

 

public class ProduceInteger extends Thread
{
	private HoldIntegerUnsynchronized pHold;
	
	public ProduceInteger(HoldIntegerUnsynchronized h)
	{
		super("ProduceInteger   ");
		pHold=h;
	}
	
	public void run()
	{
		for(int count=1;count<=10;count++)
		{
			try
			{
				Thread.sleep((int)(Math.random()*10000));
			}
			catch(InterruptedException e)
			{
				System.err.println(e.toString());
			}
			
			pHold.setSharedInt(count);
		}
		System.err.println(getName()+"finished producting values"+
		                   "\nTerminating"+getName());
	}
}

 

 

public class SharedCell 
{
	public static void main(String[] args)
	{
		HoldIntegerUnsynchronized h=new HoldIntegerUnsynchronized();
		ProduceInteger p=new ProduceInteger(h);
		ConsumeInteger c=new ConsumeInteger(h);
		
		p.start();
		c.start();  
	}	
}

 

分享到:
评论

相关推荐

    进程同步模拟设计--生产者和消费者问题

    生产者和消费者问题是进程同步中的经典案例,它阐述了如何有效地管理和协调资源的生产与消费,以避免数据竞争和死锁等问题。 生产者和消费者问题涉及到两个主要角色:生产者和消费者。生产者负责生成数据(产品),...

    用多进程同步方法演示“生产者-消费者”问题

    1、设计目的:通过研究Linux的进程机制和信号量,实现生产者消费者问题的并发控制。 2、说明:有界缓冲区内设有20个存储单元,放入取出的产品设定为1-20个整数。 3、设计要求: 生产者和消费者进程的数目不固定,可...

    进程同步实验——生产者与消费者问题算法实现

    通过运行这些程序,我们可以观察不同配置下的系统行为,理解生产者和消费者之间的竞争条件以及同步机制如何解决这些问题。 在报告文档“操作系统原理实验报告.doc”中,可能包含了对实验设计、实现过程、结果分析...

    生产者消费者实现进程的互斥和同步

    本实验要求设计在同一个进程地址...生产者线程生产物品时,若无空缓冲区可用,生产者线程必须等待消费者线程释放出一个空缓冲区;消费者线程消费物品时,若缓冲区为空,消费者线程将被阻塞,直到新的物品被生产出来。

    OS大作业生产者消费者同步问题的实现

    在某些实现中,信号量可以替代条件变量来实现生产者-消费者同步,但这里并未实际使用。 7. **线程创建与同步**:`pthread_create`函数用于创建新的线程,`pthread_join`用于等待线程结束。在主函数中,分别创建了...

    操作系统实验之进程的互斥与同步(生产者与消费者问题)VC++

    另一个是同步信号量,用于控制生产者和消费者的同步。 在VC++环境下,我们可以使用Windows API中的`CreateMutex`和`WaitForSingleObject`等函数来实现互斥,`CreateSemaphore`和`ReleaseSemaphore`函数来实现同步...

    JAVA实现线程间同步与互斥生产者消费者问题

    在`JThreadSynch`这个压缩包文件中,我们可以预见到包含的Java源代码将展示以上的一种或多种机制,通过具体的示例代码来解释和实现生产者消费者问题的线程同步和互斥。通过学习和理解这个示例,开发者可以更好地掌握...

    多进程同步解决生产者消费者问题(c++源码)

    ### 多进程同步解决生产者消费者问题(C++源码解析) #### 一、问题背景与定义 生产者-消费者问题是一种经典的并发编程问题,它最初由Edsger Dijkstra提出,用来展示信号量机制的应用场景。在这个问题中,存在两类...

    pv操作实现同步机构 生产者与消费者

    此外,还有一些辅助函数如 `Goto()` 用于改变程序计数器PC的值,`PrintInfo()` 用于打印当前的系统状态等,这些都共同构成了一个完整的生产者与消费者同步机制的模拟框架。 通过以上分析,我们可以清楚地理解到PV...

    操作系统上机实验报告 进程同步和通信-生产者和消费者问题模拟

    ### 操作系统上机实验报告:进程同步和通信——生产者和消费者问题模拟 #### 一、实验目的 本次实验的主要目的是让学生通过调试、修改、运行一个模拟程序,加深对进程概念的理解,熟悉同步和通信的过程,掌握进程...

    用多线程同步方法解决生产者-消费者问题(操作系统课设

    生产者-消费者问题是操作系统中经典的问题之一,它是指在多线程环境下,多个生产者线程和消费者线程访问同一个共享缓冲区,导致缓冲区的数据混乱和不一致的问题。 在解决生产者-消费者问题时,需要使用同步机制来...

    进程同步之生产者和消费者

    "生产者和消费者"问题是一个经典的同步问题实例,广泛用于阐述和理解同步机制。在C语言中,我们通常会用到信号量(semaphore)或者互斥锁(mutex)来解决此类问题。 1. **生产者和消费者问题概述** 生产者和消费者...

    多进程同步-生产者消费者模式-C实现

    生产者消费者模式基于操作系统提供的信号量(Semaphore)或管程(Monitor)等机制,以解决进程间的通信和同步问题。在这个模式中,生产者进程负责生成数据并放入缓冲区,而消费者进程则负责从缓冲区取出数据进行处理...

    编程实现生产者消费者或读写者的同步问题

    在多线程环境中,生产者消费者模型和读者写者问题是经典的并发控制问题,它们都涉及到资源共享与同步。本主题将深入探讨如何使用编程来解决这两个问题。 首先,生产者消费者问题是多线程并发控制中的一个经典例子。...

    linux下用多进程同步方法解决生产者-消费者问题源代码

    生产者-消费者问题是计算机科学中的一个经典同步问题,主要探讨如何在多个进程中有效地共享有限的资源,以防止数据竞争和死锁的发生。在Linux操作系统环境下,这个问题通常通过信号量(semaphore)或管道(pipe)等...

    用多进程同步方法解决生产者-消费者问题

    在并发环境中,生产者和消费者可能同时运行,因此需要同步机制来确保生产者不会在缓冲区满时继续生产,消费者也不会在缓冲区空时尝试消费。 2. **缓冲区**:在生产者-消费者问题中,通常存在一个有限大小的缓冲区...

    操作系统同步和互斥(生产者和消费者问题)

    生产者和消费者问题是线程同步的经典案例,常用于演示和理解这两个概念。 **互斥**是指在同一时刻,只有一个线程能访问临界区(critical section),即包含共享资源的代码段。这是通过互斥锁(mutex)来实现的。在...

    操作系统实验报告经典的生产者—消费者问题.pdf

    他们之间也存在互斥,即生产者消费者必须互斥访问缓冲池,即不能有两个以上的进程同时进展。 在本实验中,我们使用C#语言在Windows操作系统环境下实现了生产者和消费者的模拟。在实验中,我们使用了两个线程,一个...

Global site tag (gtag.js) - Google Analytics