Post on 07-Feb-2016
description
JAVA THREAD 2030523313 - Network programmingAsst. Prof. Dr. Choopan Rattanapoka
DeadLock (1) Deadlock ท่ีสถานการณ์ท่ีเมื่อมี thread จำานวนตัง้แต่ 2 ตัวขึ้นไป ถกู
block ตลอดเวลาเพื่อรอกันเอง
Deadlock (2)
Producer-Consumer Problem
ปัญหา producer-consumer problem คือ ผู้ผลิต (producer) ผลิตสนิค้าแล้วนำาไปเก็บในโกดังสนิค้า
(warehouse) ผู้บรโิภค (consumer) จะนำาสนิค้าออกมาจากโกดัง Warehouse จะเก็บสนิค้าได้แค่ 1 ชิน้ Producer จะต้องรอ ไมผ่ลิตของถ้าโกดังเต็ม Consumer จะต้องรอ ไมน่ำาสนิค้าออกจากโกดังถ้าโกดังวา่ง
เวลาในการผลิตหรอืนำาสนิค้าออกจะสุม่ระหวา่ง 0 – 999 ms
warehouse
Producer Consumer
Class : Warehouse (v.1)
Class: Producer (v.1)
Class: Consumer (v.1)
Class : ProducerConsumer (main)
Deadlock…??!!
เขยีนผิดตรงไหน เนี่ย ??!
แก้: Warehouse (v.2)
แก้: Producer (v.2)
แก้: Consumer (v.2)
คิดยงัไงกับโปรแกรม น้ี ??
Wait/Notify/NotifyAll Thread เมื่อจำาเป็นจะต้องรอขอ้มูลอะไรท่ีอาจจะกินเวลา สามารถ
เรยีกใชง้านเมธอด wait() เพื่อใหห้ยุดรอจนกวา่จะมกีารแจง้จากThread อ่ืน
notify() เป็นเมธอดสำาหรบัสง่สญัญาณให้ Thread 1 ตัว เพื่อ ใหต่ื้นจากการ wait()
notifyAll() เป็นเมธอดสำาหรบัสง่สญัญาณใหท้กุ Thread ท่ี อยูใ่นสถานะ wait ใหต่ื้นขึ้นเพื่อทำางาน
แก้: Warehouse (v.3) ใช้ Class Producer และ Consumer ของ
v.1
ปัญหา Classic Dining Philosophers
มนีักปรชัญาอยู่ 5 คน นัง่บนโต๊ะกลม มสีอ้มอยูทั่ง้หมด 5 อัน นักปรชัญาจะมวีงการทำางานคือ
คิด (think) หวิ (hungry) กิน (eat)
การท่ีนักปรชัญาจะกินได้ จะต้องหยบิสอ้มด้านซา้ย และด้านขวา ของตัวเองเท่านัน้ และต้องหยบิได้ทัง้ 2 อันถึงจะสามารถกินได้
ตัวชว่ย : ถ้าต้องการกินแล้วไมไ่ด้สอ้มทัง้ 2 อันใหก้ลับไปคิดต่อ