嵌入式系统导论-实验课-1-ex1.pdf
文本预览下载声明
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
显示全部