Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

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 40

Explanation / 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);

}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote