Question: Modify the program to implement the strict alternation solution to achieve mutual exclusion ( refer back to the relevant prep work video/slides if you need
Modify the program to implement the strict alternation solution to achieve mutual exclusion (refer back to the relevant prep work video/slides if you need to).
Build and execute the updated program several times. Expected Output: Your program should produce the following output
Code:
#include
#include
int count;
int turn = 0; // Shared variable used to implement strict alternation
void* myFunction(void* arg)
{
int actual_arg = *((int*) arg);
for(unsigned int i = 0; i
// TODO:
// Make sure that the thread waits for its turn
// before it enters the critical region.
//
// HINT: The thread ID is stored in actual_arg
// Beginning of the critical region
count++;
std::cout
// End of the critical region
// TODO:
// Make sure that the other thread gets a turn
//
// HINT: There are only two threads: 0 and 1
// You can use the C++ NOT operator (!)
// to toggle back and forth.
}
pthread_exit(NULL);
}
// HINT: It is not necessary to make any changes in main()
int main()
{
int rc[2];
pthread_t ids[2];
int args[2];
count = 0;
for(unsigned int i = 0; i
args[i] = i;
rc[i] = pthread_create(&ids[i], NULL, myFunction, (void*) &args[i]);
}
for(unsigned int i = 0; i
pthread_join(ids[i], NULL);
}
std::cout
pthread_exit(NULL);
}
Thread #0 count = 1 Thread #1 count = 2 Thread #0 count = 3 Thread #1 count = 4 Thread #0 count = 5 Thread #1 count = 6 Thread #0 count = 7 Thread #1 count = 8 Thread #0 count = 9 Thread #1 count = 10 Thread #0 count = 11 Thread #1 count = 12 Thread #0 count = 13 Thread #1 count = 14 Thread #0 count = 15 Thread #1 count = 16 Thread #0 count = 17 Thread #1 count = 18 Thread #0 count = 19 Thread #1 count = 20 Final count 20Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
