Modify the pthread-data-sharing-mutex-os-call.cpp program to apply a Pthread mut
ID: 3886979 • Letter: M
Question
Modify the pthread-data-sharing-mutex-os-call.cpp program to apply a Pthread mutex solution, i.e., you will use Linux system calls to control access to the critical region.
You may want to refer to the prep materials for background info (section 2.3.6 in the textbook) and also to the Linux manual for the names and parameters of the functions.
The necessary changes will be very small, i.e., not a lot of code is needed.
code:
#include <iostream>
#include <pthread.h>
#define TOTAL_THREADS 4
int count;
pthread_mutex_t the_mutex; // phread mutex variable
void* myFunction(void* arg)
{
int actual_arg = *((int*) arg);
for(unsigned int i = 0; i < 10; ++i) {
// TODO:
// Use a Pthread mutex to control
// access to the critical region.
// Beginning of the critical region
count++;
std::cout << "Thread #" << actual_arg << " count = " << count << std::endl;
// End of the critical region
}
pthread_exit(NULL);
}
int main()
{
int rc[TOTAL_THREADS];
pthread_t ids[TOTAL_THREADS];
int args[TOTAL_THREADS];
// TODO: Initialize the pthread mutex here
count = 0;
for(unsigned int i = 0; i < TOTAL_THREADS; ++i) {
args[i] = i;
rc[i] = pthread_create(&ids[i], NULL, myFunction, (void*) &args[i]);
}
for(unsigned int i = 0; i < TOTAL_THREADS; ++i) {
pthread_join(ids[i], NULL);
}
std::cout << "Final count = " << count << std::endl;
pthread_exit(NULL);
}
Thread #0 count = 1 Thread #0 count = 2 Thread #0 count = 3 Thread #0 count = 4 Thread #0 count = 5 Thread #0 count = 6 Thread #0 count = 7 Thread #0 count = 8 Thread #0 count = 9 Thread #0 count = 10 Thread #3 count = 11 Thread #3 count = 12 Thread #3 count = 13 Thread #3 count = 14 Thread #3 count = 15 Thread #3 count = 16 Thread #3 count = 17 Thread #3 count = 18 Thread #3 count = 19 Thread #3 count = 20 Thread #2 count = 21 Thread #1 count = 22 Thread #1 count = 23 Thread #1 count = 24 Thread #1 count = 25 Thread #1 count = 26 Thread #1 count = 27 Thread #1 count = 28 Thread #1 count = 29 Thread #1 count = 30 Thread #1 count = 31 Thread #2 count = 32 Thread #2 count = 33 Thread #2 count = 34 Thread #2 count = 35 Thread #2 count = 36 Thread #2 count = 37 Thread #2 count = 38 Thread #2 count = 39 Thread #2 count = 40 Final count 40Explanation / Answer
#include <iostream>
#include <pthread.h>
#define TOTAL_THREADS 4
int count;
pthread_mutex_t the_mutex;
void* myFunction(void* arg)
{
int actual_arg = *((int*) arg);
for(unsigned int i = 0; i < 10; ++i) {
pthread_mutex_lock(&the_mutex);
count++;
std::cout << "Thread #" << actual_arg << " count = " << count << std::endl;
pthread_mutex_unlock(&the_mutex);
}
pthread_exit(NULL);
}
int main()
{
int rc[TOTAL_THREADS];
pthread_t ids[TOTAL_THREADS];
int args[TOTAL_THREADS];
count = 0;
for(unsigned int i = 0; i < TOTAL_THREADS; ++i) {
args[i] = i;
rc[i] = pthread_create(&ids[i], NULL, myFunction, (void*) &args[i]);
}
for(unsigned int i = 0; i < TOTAL_THREADS; ++i) {
pthread_join(ids[i], NULL);
}
std::cout << "Final count = " << count << std::endl;
pthread_exit(NULL);
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.