NameofProject:Producer-ConsumerProblemCourseName:OperatingSystemCourseNumber:CSCI330Student’sName:Student’sID:DateofSubmission:Dec20,2011TableofContentsRequirementofProject……………………………………………………………………………………….3OperatingEnvironment…………………………………………………………..………….………………3PrincipleofProgram………………………………………………………..………….………………………3Structure……………………………………………………………………………………………………………………3FlowChart…………………………………………………………………………………………………………………4CodeoftheProgram……………………………………………………………………………..……………………5ResultsofSimulation…………………………………………………………………………….…………………….8ConsiderableImprovement…………………………………………………………………………………9Conclusion……………………………………………………………………………..……………………………11References……………………………………………………………………………………………..……………12RequirementofProjectTheproducer-consumerproblemillustratedasthemodelofbounded-buffer,requiresequentialprocessesorthreadsrunningasynchronouslyandpossiblysharingdata.Thereareseveralmethodstosolvethisproblem,andsemaphore,mutex(simplifiedsemaphore)andmonitorarecommonlyusedonthis.Thisprojectrequiresustomakeproducersandconsumers–runningasseparatedthreads,andsemaphoreswithfull,empty,andmutexparameterstosimulatethisprocedure.Inthetextbook,wearesuggestedtousePthreadsorWin32API,however,IdecidedtouseJavatosimulatetheprocedure,becauseJavaisthemostfamiliarlanguagethatwehavelearned.BecauseoftheJavaVirtualMachine(JVM)layer,manystructuresaremadesimpleinJavacomparedtowin32APIandCinUNIXenvironment,andwecansimulatetheproblemwithoutacertainsemaphore.OperatingEnvironmentOS:Windows7,JDK:Java7edition1.7.0_02PrincipleofProgramBecauseofthelimitedJavaprogrammingskills,Icanonlysimulatetheprocedureinthemostsimplifiedway.Onlythreesub-classesareputundertheProducerConsumerClassintheprogram,andonlyonemethodwhichisthenecessarymainvoidmethodinthisClass.Thethreesub-classesarestorage,producerandconsumer,andproducerandconsumerclassesaresetasJavathreads,becausetheyextendlibraryclassofThreadinjava.lang.Objectpackage.Thereareseveralobjectsandmethodsinthesethreesub-classes,andtheyarecarefullydefinedasprivate,publicorsynchronized.Structure:Thefullstructureofwholeprogramisillustratedinthetablebelow.SuperClass:ProducerConsumerWithObject:p1~p7(sevenproducerobjects),c1~c3(threeconsumerobjects)Withmethod:mainSub-class:Godown//storageclassInnervariable:max_size,curnum//thenumberthatthestoragehavecurrentlyInnermethod:produce(int),consume(int)Sub-class:ProducerInnervariable:neednum//numberofproducingInnermethod:run//inheritfromtheThreadClassinjava.lang.ObjectSub-class:ConsumerInnervariable:neednum//numberofconsumingInnermethod:run//inheritfromtheThreadClassinjava.lang.ObjectFlowChart:Theflowchartofthisprogramisillustratedasbelow:Thekeyofrealizationofthisprocedureisthatmakeeachtheproducerandconsumerarealjavathread.BylookinguptheofficialjavadocinOracleWebsites,wecanfinddetailsoftheclassThreadinjava.lang.Objectpackages.Ifindsomemethodsandexamplesofusage,andbythefunctionsandmethodsprovidedbyofficial,IusethemethodofnotifyAll(),wait().Tableofmethodsofjava.lang.Objecti...