Problem 2. In addition to POSIX semaphores, the POSIX threads standard provides another useful synchronization primitives: the muter (type pthread_mutex_t) A mutex is used to wait for it implement mutual exclusion. A thread locks a mutex variable by calling pthread_mutex_lock(), and unlocks it by calling pthread_mutex_unlock(). When a thread calls pthread_mutex_lock() while another thread has previously locked the same mutex but not yet unlocked it, the former thread blocks until the latter thread calls pthread_mutex_unlock() on it. a. Is there any difference between a binary semaphore and a pthread_mutex? Justify your answer. b. Consider a program with multiple threads running this function: struct {...} shared_data; pthread_mutex_t m; void *thread_func(void *arg) { [update shared_data]; // critical section! return NULL; } Assume the mutex is initialized before the threads are created. Add the necessary pthread_mutex_* calls to the above code to ensure that only one thread is in the critical section at any time. c. Consider the program below, where ". . ." represents code that updates a shared data structure.
Problem 2. In addition to POSIX semaphores, the POSIX threads standard provides another useful synchronization primitives: the muter (type pthread_mutex_t) A mutex is used to wait for it implement mutual exclusion. A thread locks a mutex variable by calling pthread_mutex_lock(), and unlocks it by calling pthread_mutex_unlock(). When a thread calls pthread_mutex_lock() while another thread has previously locked the same mutex but not yet unlocked it, the former thread blocks until the latter thread calls pthread_mutex_unlock() on it. a. Is there any difference between a binary semaphore and a pthread_mutex? Justify your answer. b. Consider a program with multiple threads running this function: struct {...} shared_data; pthread_mutex_t m; void *thread_func(void *arg) { [update shared_data]; // critical section! return NULL; } Assume the mutex is initialized before the threads are created. Add the necessary pthread_mutex_* calls to the above code to ensure that only one thread is in the critical section at any time. c. Consider the program below, where ". . ." represents code that updates a shared data structure.
Chapter11: Operating Systems
Section: Chapter Questions
Problem 14VE
Related questions
Question
![Problem 2. In addition to POSIX semaphores, the POSIX threads standard provides another
useful synchronization primitives: the muter (type pthread_mutex_t) A mutex is used to wait for
it implement mutual exclusion. A thread locks a mutex variable by calling pthread_mutex_lock(),
and unlocks it by calling pthread_mutex_unlock(). When a thread calls pthread_mutex_lock()
while another thread has previously locked the same mutex but not yet unlocked it, the former
thread blocks until the latter thread calls pthread_mutex_unlock() on it.
a. Is there any difference between a binary semaphore and a pthread_mutex? Justify your answer.
b. Consider a program with multiple threads running this function:
struct {...} shared_data;
pthread_mutex_t m;
void *thread_func(void *arg) {
[update shared_data]; // critical section!
return NULL;
}
Assume the mutex is initialized before the threads are created. Add the necessary pthread_mutex_*
calls to the above code to ensure that only one thread is in the critical section at any time.
c. Consider the program below, where "..." represents code that updates a shared data structure.](/v2/_next/image?url=https%3A%2F%2Fcontent.bartleby.com%2Fqna-images%2Fquestion%2F2b2b0246-74c5-427f-bbae-6a253749f017%2F70482a6e-2a10-4ff4-8c6f-be3da7e1385b%2F1iesqip_processed.png&w=3840&q=75)
Transcribed Image Text:Problem 2. In addition to POSIX semaphores, the POSIX threads standard provides another
useful synchronization primitives: the muter (type pthread_mutex_t) A mutex is used to wait for
it implement mutual exclusion. A thread locks a mutex variable by calling pthread_mutex_lock(),
and unlocks it by calling pthread_mutex_unlock(). When a thread calls pthread_mutex_lock()
while another thread has previously locked the same mutex but not yet unlocked it, the former
thread blocks until the latter thread calls pthread_mutex_unlock() on it.
a. Is there any difference between a binary semaphore and a pthread_mutex? Justify your answer.
b. Consider a program with multiple threads running this function:
struct {...} shared_data;
pthread_mutex_t m;
void *thread_func(void *arg) {
[update shared_data]; // critical section!
return NULL;
}
Assume the mutex is initialized before the threads are created. Add the necessary pthread_mutex_*
calls to the above code to ensure that only one thread is in the critical section at any time.
c. Consider the program below, where "..." represents code that updates a shared data structure.
![void *thread_func (void *arg) {
pthread_mutex_t mymutex;
int rv = pthread_mutex_init(&mymutex,NULL); // default attributes
}
rv = pthread_mutex_lock (&mymutex);
assert (!rv);
... // critical section
rv = pthread_mutex_unlock (&mymutex);
assert (!rv);
return NULL;
The main program creates and executes 4 threads running thread_func(). What is wrong
with the above code? (Hint: it has nothing to do with the variable rv or the call to assert.)](/v2/_next/image?url=https%3A%2F%2Fcontent.bartleby.com%2Fqna-images%2Fquestion%2F2b2b0246-74c5-427f-bbae-6a253749f017%2F70482a6e-2a10-4ff4-8c6f-be3da7e1385b%2F3j0j2gf_processed.png&w=3840&q=75)
Transcribed Image Text:void *thread_func (void *arg) {
pthread_mutex_t mymutex;
int rv = pthread_mutex_init(&mymutex,NULL); // default attributes
}
rv = pthread_mutex_lock (&mymutex);
assert (!rv);
... // critical section
rv = pthread_mutex_unlock (&mymutex);
assert (!rv);
return NULL;
The main program creates and executes 4 threads running thread_func(). What is wrong
with the above code? (Hint: it has nothing to do with the variable rv or the call to assert.)
Expert Solution
![](/static/compass_v2/shared-icons/check-mark.png)
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
![Blurred answer](/static/compass_v2/solution-images/blurred-answer.jpg)
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
![Systems Architecture](https://www.bartleby.com/isbn_cover_images/9781305080195/9781305080195_smallCoverImage.gif)
Systems Architecture
Computer Science
ISBN:
9781305080195
Author:
Stephen D. Burd
Publisher:
Cengage Learning
![Systems Architecture](https://www.bartleby.com/isbn_cover_images/9781305080195/9781305080195_smallCoverImage.gif)
Systems Architecture
Computer Science
ISBN:
9781305080195
Author:
Stephen D. Burd
Publisher:
Cengage Learning