Back to course home
0% completed
Vote For New Content
Algorithm using conditions instead of semaphores
Raman Ailawadhi
Dec 14, 2025
<p>Shared:</p><p>Lock mutex</p><p>Condition hasData = mutex.newCondition()</p><p>Condition notFull[i] = mutex.newCondition() // for each buffer i</p><p>N buffers, each with capacity C</p><p><br></p><p>Producer (for buffer i):</p><p>while running:</p><p> lock(mutex)</p><p> while buffer[i] is full:</p><p> wait(notFull[i]) // atomically: release mutex, sleep, re-acquire mutex</p><p> add item to buffer[i]</p><p> signal(hasData) // at least one buffer now has data</p><p> unlock(mutex)</p><p><br></p><p>Consumer:</p><p>while running:</p><p> lock(mutex)</p><p> while all buffers are empty:</p><p> wait(hasData) // release mutex, wait for any data</p><p> pick a non-empty buffer j</p><p> item = buffer[j].remove()</p><p> signal(notFull[j]) // buffer j now has space</p><p> unlock(mutex)</p><p> process(item)</p><p><br></p>
1
0
Comments
Comments