Hello! I am having issues undertanding the code in the picture. I am mosly interested on an explantion on how strict alternation is implemented in the while loop followed by the if else. I am sending here all the code but I just need help for what is the inside of myFunction at the begining (see image). Thank you! #include #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 < 10; ++i) { while (turn != actual_arg); // Beginning of the critical region count++; std::cout << "Thread #" << actual_arg << " count = " << count << std::endl; //End of the critical region if (actual_arg == 0) { turn = 1; } else { turn = 0; } } // Random wait - This code is just to ensure that the threads // show data sharing problems int max = rand() % 100000; for (int x = 0; x < max; x++); // End of random wait code 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 < 2; ++i) { args[i] = i; rc[i] = pthread_create(&ids[i], NULL, myFunction, (void*) &args[i]); } for(unsigned int i = 0; i < 2; ++i) { pthread_join(ids[i], NULL); } std::cout << "Final count = " << count << std::endl; pthread_exit(NULL); }
Hello! I am having issues undertanding the code in the picture. I am mosly interested on an explantion on how strict alternation is implemented in the while loop followed by the if else. I am sending here all the code but I just need help for what is the inside of myFunction at the begining (see image). Thank you! #include #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 < 10; ++i) { while (turn != actual_arg); // Beginning of the critical region count++; std::cout << "Thread #" << actual_arg << " count = " << count << std::endl; //End of the critical region if (actual_arg == 0) { turn = 1; } else { turn = 0; } } // Random wait - This code is just to ensure that the threads // show data sharing problems int max = rand() % 100000; for (int x = 0; x < max; x++); // End of random wait code 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 < 2; ++i) { args[i] = i; rc[i] = pthread_create(&ids[i], NULL, myFunction, (void*) &args[i]); } for(unsigned int i = 0; i < 2; ++i) { pthread_join(ids[i], NULL); } std::cout << "Final count = " << count << std::endl; pthread_exit(NULL); }
Database System Concepts
7th Edition
ISBN:9780078022159
Author:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Chapter1: Introduction
Section: Chapter Questions
Problem 1PE
Related questions
Question
Hello!
I am having issues undertanding the code in the picture. I am mosly interested on an explantion on how strict alternation is implemented in the while loop followed by the if else. I am sending here all the code but I just need help for what is the inside of myFunction at the begining (see image). Thank you!
#include <iostream>
#include <pthread.h>
#include <stdlib.h>
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 < 10; ++i) {
while (turn != actual_arg);
// Beginning of the critical region
count++;
std::cout << "Thread #" << actual_arg << " count = " << count << std::endl;
//End of the critical region
if (actual_arg == 0) {
turn = 1;
} else {
turn = 0;
}
}
// Random wait - This code is just to ensure that the threads
// show data sharing problems
int max = rand() % 100000;
for (int x = 0; x < max; x++);
// End of random wait code
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 < 2; ++i) {
args[i] = i;
rc[i] = pthread_create(&ids[i], NULL, myFunction, (void*) &args[i]);
}
for(unsigned int i = 0; i < 2; ++i) {
pthread_join(ids[i], NULL);
}
std::cout << "Final count = " << count << std::endl;
pthread_exit(NULL);
}
#include <iostream>
#include <pthread.h>
#include <stdlib.h>
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 < 10; ++i) {
while (turn != actual_arg);
// Beginning of the critical region
count++;
std::cout << "Thread #" << actual_arg << " count = " << count << std::endl;
//End of the critical region
if (actual_arg == 0) {
turn = 1;
} else {
turn = 0;
}
}
// Random wait - This code is just to ensure that the threads
// show data sharing problems
int max = rand() % 100000;
for (int x = 0; x < max; x++);
// End of random wait code
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 < 2; ++i) {
args[i] = i;
rc[i] = pthread_create(&ids[i], NULL, myFunction, (void*) &args[i]);
}
for(unsigned int i = 0; i < 2; ++i) {
pthread_join(ids[i], NULL);
}
std::cout << "Final count = " << count << std::endl;
pthread_exit(NULL);
}
Expert Solution
This question has been solved!
Explore an expertly crafted, step-by-step solution for a thorough understanding of key concepts.
This is a popular solution!
Trending now
This is a popular solution!
Step by step
Solved in 3 steps
Knowledge Booster
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.Recommended textbooks for you
Database System Concepts
Computer Science
ISBN:
9780078022159
Author:
Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:
McGraw-Hill Education
Starting Out with Python (4th Edition)
Computer Science
ISBN:
9780134444321
Author:
Tony Gaddis
Publisher:
PEARSON
Digital Fundamentals (11th Edition)
Computer Science
ISBN:
9780132737968
Author:
Thomas L. Floyd
Publisher:
PEARSON
Database System Concepts
Computer Science
ISBN:
9780078022159
Author:
Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:
McGraw-Hill Education
Starting Out with Python (4th Edition)
Computer Science
ISBN:
9780134444321
Author:
Tony Gaddis
Publisher:
PEARSON
Digital Fundamentals (11th Edition)
Computer Science
ISBN:
9780132737968
Author:
Thomas L. Floyd
Publisher:
PEARSON
C How to Program (8th Edition)
Computer Science
ISBN:
9780133976892
Author:
Paul J. Deitel, Harvey Deitel
Publisher:
PEARSON
Database Systems: Design, Implementation, & Manag…
Computer Science
ISBN:
9781337627900
Author:
Carlos Coronel, Steven Morris
Publisher:
Cengage Learning
Programmable Logic Controllers
Computer Science
ISBN:
9780073373843
Author:
Frank D. Petruzella
Publisher:
McGraw-Hill Education