Exercise
Enhance your understanding by getting hands-on practice with this exercise on different concurrency related bugs.
We'll cover the following...
This exercise lets you explore some real code that deadlocks (or avoids deadlock). The different versions of code correspond to different approaches to avoiding deadlock in a simplified vector_add()
routine. See the previous lesson for details on these programs and their common substrate.
ALL = vector-deadlock vector-global-order vector-try-wait vector-avoid-hold-and-wait vector-nolock COMMON = vector-header.h main-common.c main-header.h all: $(ALL) clean: rm -f $(ALL) *~ vector-deadlock: vector-deadlock.c $(COMMON) gcc -o vector-deadlock vector-deadlock.c -Wall -pthread -O vector-global-order: vector-global-order.c $(COMMON) gcc -o vector-global-order vector-global-order.c -Wall -pthread -O vector-try-wait: vector-try-wait.c $(COMMON) gcc -o vector-try-wait vector-try-wait.c -Wall -pthread -O vector-avoid-hold-and-wait: vector-avoid-hold-and-wait.c $(COMMON) gcc -o vector-avoid-hold-and-wait vector-avoid-hold-and-wait.c -Wall -pthread -O vector-nolock: vector-nolock.c $(COMMON) gcc -o vector-nolock vector-nolock.c -Wall -pthread -O
Questions
-
First, let’s make sure you understand how the programs generally work, and some of the key options. Study the code in
vector-deadlock.c
, as well as inmain-common.c
and related files. Now, run./vector-deadlock -n 2 -l 1 -v
, which ...