
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Implement Monitors Using Semaphores
To implement monitor using semaphores, for each monitor, a semaphore mutex (which is initialized to 1) is provided. Wait(mutex) must be executed by a process before entering the monitor and must execute signal(mutex) after leaving the monitor. Since a signaling process must wait until the resumed process either leaves or waits, an additional semaphore, next, is introduced, initialized to 0. next can be used by The signaling processes to suspend themselves. An integer variable next_count is also provided to count the number of processes suspended on next. Thus, each external function F is replaced by-
wait(mutex); … body of F ... if (next_count > 0) signal(next); else signal(mutex);
Mutual exclusion within a monitor is ensured. Let’s now see how condition variables are implemented as well. For each condition x, we introduce a semaphore x _sem and an integer variable x_count, both initialized to 0. The operation x.wait() can now be implemented as −
x_count++; if (next_count > 0){ signal(next); } else { signal(mutex); } wait(x_sem); x_count--;
The operation x.signal() can be implemented as −
if (x _count > 0){ next_count++; signal(x_sem); wait(next); next_count--; }