Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,027

HOME > Java Programming > Java Forum > ขอปรึกษาเรื่อง Deadlock หน่อยครับ ว่าทำอย่างไรจึงจะเกิด - Java ครับ



 

ขอปรึกษาเรื่อง Deadlock หน่อยครับ ว่าทำอย่างไรจึงจะเกิด - Java ครับ

 



Topic : 101924

Guest




สวัสดีครับ ขอปรึกษาเรื่อง การทำให้โปรแกรมเกิด deadlock แล้วใช้วิธีแก้ปัญหาโดยใช้ Semaphore กับ Monitor(synchronization)(เอามาจากพิวกิไม่รู้ว่าถูกหรือเปล่า) ตอนนี้ผมคิดว่าผมเขียนโค็ตให้เกิด deadlock ได้ดังนี้ครับ

Code
public class Deadlock5{
    /*private static final Object obj1 = "resource1";
    private static final Object obj2 = "resource2";*/
    
    //semaphore
    private static final Semaphore obj1 = new Semaphore(1);
    private static final Semaphore obj2 = new Semaphore(1);
    
    public static void main(String[] args) throws Exception {
      
        obj1.acquire();
        obj2.acquire();
        Thread t1 = new Thread(new p1());
        Thread t2 = new Thread(new p2());
        t1.start();
        t2.start();
    }
    public static class p1 implements Runnable {
       
        @Override
        public void run(){
            
           
            try{
                
                synchronized(obj1){
                    System.out.println("Thread1 acquired lock on resource1");
                    Thread.sleep(100);
                    obj1.release();
                   
                synchronized(obj2){
                System.out.println("Thread1 acquired lock on resource2");
                System.out.println("finish");
            }
                }
               
            }
            catch(InterruptedException e){System.out.println("Process interrupted....");}
            
                
            }
        }
    
    public static class p2 implements Runnable {
        @Override
        public void run(){
           
                try{
                    
                    synchronized(obj2){
                System.out.println("Thread2 acquired lock on resource2");
                Thread.sleep(100);
                obj2.release();
                
                 synchronized(obj1){
                System.out.println("Thread2 acquired lock on resource1");
                System.out.println("finish");
            }
                    }
                    
                  
                }
                catch(InterruptedException e){System.out.println("Process interrupted....");}
           
            }
        }
        
    }


เมื่อ run โปรแกรม จะเกิดdeadlock ขึ้น โดย Thread 1 จะไปlock resource 1 แล้ว พยายามจะไป lock resource2 แต่เนื่องจาก Thread2 ได้lock resource 2 ไว้ก่อนแล้วจึง รอให้ Thread2 ปล่อย resource นั้น เช่นกัน Thread2 ก็พยายามจะ lock resource 1
จึงทำให้เกิด deadlock ขึ้น

ปัญหาอยู่ที่ว่า ผมจะใช้ Semaphore จาก java conCurrent semaphore แต่ไม่รู้ว่าจะใช้ acquire() กับ release() ในช่วงใหนครับ

ขอคำแนะนำหน่อยครับ ว่าผมมาถูกทางหรือไม่ หรือมาผิดทาง(โค็ตผิด) แล้วใช้ monitor algorithm แก้ปัญหานี้อย่างไรครับ



Tag : Java, JAVA







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2013-10-22 14:38:38 By : korakot View : 2016 Reply : 1
 

 

No. 1

Guest


อยากช่วยนะ ขอติดไว้ก่อน

เดี๋ยวสอบเสร็จแล้วจะช่วยคิด ติดไว้วันจันทร์นะ

ถามตอนนี้บอกได้เลยว่าลืมแล้ว






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-10-24 08:42:55 By : ห้ามตอบเกินวันละ 2 กระทู้
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : ขอปรึกษาเรื่อง Deadlock หน่อยครับ ว่าทำอย่างไรจึงจะเกิด - Java ครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 04
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่