In this assignment you will study different methods to enforce mutual exclusion.
D. A shared variable which works as a
counteris initialized to
0and then incremented by the threads in set
Iand decremented by the threads in set
D. The sum of all the increments is equal to the absolute value of the sum of all the decrements.
I, each incrementing the counter
2. In total the counter will be incremented by
5*20*2 = 200. There are two threads in set
D, each decrementing the counter
5. In total the counter will be decremented by
2*20*5 = 200.
0(the same as value it was initialized with).
In the terminal, navigate to the
module-4/mandatory directory. Use make to compile the program.
The executable will be named
mutex and placed in the
bin sub directory. Run the program from the terminal.
Run the program several times and study the provided source code.
Identify the critical sections in the program. The critical sections should be as small as possible.
Your task is to make sure that at any time, at most one thread execute in a critical section, i.e., access to the critical sections should be mutual exclusive. You will use three different methods to ensure that updates to the shared counter variable appear to the system to occur instantaneously, i.e., make sure updates are atomic.
The first option you will study is to use the
mutex lock provided by the pthreads library to enforce mutual exclusion
when accessing the shared counter variable.
Add the needed synchronization in the functions
dec_mutex to make
the program execute according to the desired behavior.
At the beginning of
mutex.c you find the following declaration.
/* Shared variable used to implement a spinlock */ volatile int lock = false;
lockvariable to implement the
dec_tas_spinlockto use use the test-and-set spinlock to enforce mutual exclusion.
A third option is to use the atomic addition and subtraction GCC built-ins.
Change the functions
dec_atomic to use atomic addition and
subtraction to make the program execute according to the desired behavior.
Observe the throughput of the three different approaches (operations per second).