
48 Introduction to Concurrency in Programming Languages
Listing 3.3: Code prone to livelock.
void thread1 () {
begin1 :
lock (A );
if ( locked (B)) {
unlock (A );
goto begin1 ;
}
lock (B );
work ();
unlock (A );
unlock (B );
}
void thread2 () {
begin2 :
lock (B );
if ( locked (A)) {
unlock (B );
goto begin2 ;
}
lock (A );
work ();
unlock (A );
unlock (B );
}