mirror of
https://github.com/jackyzha0/quartz.git
synced 2025-12-27 14:54:05 -06:00
1.0 KiB
1.0 KiB
| title | aliases | tags | ||
|---|---|---|---|---|
| 20-sync-deadlock |
|
Bounded buffer problem
producer consumer problem
issues
- no data in buffe: consumer has nothing to consume: data race
- buffer is full: no space for producer to produce: busy waiting
private vars
- in: next pos in buf to be writted
- out: next pos in buf to be read
shared variables
- buffer
- counter: number of items in buffer
waiting
- busy: proces keeps checking (if buffer is still full) wasting CPU time
- non busy: suspend the process
soution with shared array
PRODUCER: repeat
...
produce an item in nextp
...
while counter = n do no-op;
buffer[in] := nextp;
in := in+1 mod n;
counter := counter+1;
until false;
CONSUMER: repeat
while counter = 0 do no-op;
nextc := buffer[out];
out := out+1 mod n;
counter := counter-1;
...
consume the item in nextc
...
until false;
counter is a shared variable - causes a data race problem

