Ch6.6 Classic Problems of Synchronization
6.6.1. The Bounded-Buffer Problem
bounded-buffer producer process sample code: do  {
    ...
    // produce an item in nextp
    wait(empty);
    wait(mutex);
    ...
    // add nextp to buffer
    ...
    signal(mutex);
    signal(full);
    } while (true);bounded-buffer consumer process sample code:
 do  {
    wait(full);
    wait(mutex);
    ...
    // remove an item from buffer to nextc
    ...
    // consume the item in nextc
    ...
    } while (true);- Assume that the pool consists of n buffers
 - Each capable of holding one item.
 
- The mutex semaphore provides mutual exclusion for accesses to the buffer pool and is initialized to the value 1.
- The empty and full semaphores
count the number of empty and full buffers. 
 - empty initialized to the value n; full is initialized to the value 0.
 
6.6.2 The Readers-Writers Problem
Writer process: do  {
    wait(wrt);
    ...
    // writing is performed
    ...
    signal(wrt);
    } while (true); do {
    wait(mutex);
    readcount++;
    if (readcount == 1) wait(wrt);
    signal(mutex);
    ...
    // readint is performed
    ...
    wait(mutex);
    readcount--;
    if (readcount == 0) signal(wrt);
    signal(mutex);
    } while (true);- No reader be kept waiting unless a writer has already obtained
permission to use the shared object.
 - writers may starve
 
- If a writer is waiting to access the object, no new readers may start reading.
 - readers may starve
 
- solution:
 - The reader processes share the following data structures:
 
        semaphore mutex, wrt; // initial to 1
        int readcount; // initial to 06.6.3 The Dining-Philosophers Problem
do  {
    wait(chopstick[i]);
    wait(chopstick[(i+1) % 5];
    ...
    // eat
    ...
    signal(chopstick[i]);
    signal(chopstick[(i+1) % 5];
    ...
    // think
    ...
    } while (true);- shared data:
    semaphore chopstick[5]; // initialized to 1- Allow a philosopher to pick up her chopsticks only if both chopsticks are available (to do this, she must pick them up in a critical section).
Reference:
Operating System Concepts 8th, by Silberschatz, Galvin, Gagne
Wikipedia
 
沒有留言:
張貼留言