文档详情

嵌入式系统导论-实验课-1-ex1.pdf

发布:2017-04-08约2.09千字共3页下载文档
文本预览下载声明
SMIE-141: Introduction to Embedded Systems Exercise 1: A Replicable Simple Example of Deadlock Kai Huang November 15, 2014 Figure 1: Source code from the lecture. 1 1 Keyword:Synchronized The Java programming language provides two basic synchronization idioms: synchronized methods and synchronized statements. We just talk about synchronized methods. To make a method synchronized, simply add the synchronized keyword to its declara- tion: 1 public class SynchronizedCounter { 2 private int c = 0 ; 3 4 public synchronized void increment ( ) { 5 c++; 6 } 7 8 public synchronized void decrement ( ) { 9 c??; 10 } 11 12 public synchronized int value ( ) { 13 return c ; 14 } 15 } If count is an instance of SynchronizedCounter, then making these methods synchro- nized has two effects: ? First, it is not possible for two invocations of synchronized methods on the same object to interleave. When one thread is executing a synchronized method for an object, all other threads that invoke synchronized methods for the same object block (suspend execution) until the rst thread is done with the object. ? Second, when a synchronized method exits, it automatically establishes a happens- before relationship with any subsequent invocation of a synchronized method for the same object. This guarantees that changes to the state of the object are visible to all threads. A synchronized method in Java is synchronized on the object owning the method. Only one thread can execute inside a synchronized object method. If more than one object exist, then one thread at a time can execute inside a synchronized method per object. One thread per object. 2 Deadlock The synchronized methods a.methodA(b) and b.methodB(a) invoke the synchronized methods b.last() and a.last(), respectively. In the example, as shown in Fig.2, the main- Thread and Thread t invoke a.methodA(b) and b.methodB(a), respectively. In the case that these two invocations execute simultaneously, the main-Thread and Thread t will wait for
显示全部
相似文档