vault backup: 2022-10-30 14:40:53

This commit is contained in:
Jet Hughes 2022-10-30 14:40:53 +13:00
parent 555c2e1e61
commit 663a67d6cc

View File

@ -12,8 +12,8 @@ tags:
producer consumer problem producer consumer problem
issues issues
- no data in buffe: consumer has nothing to consume - no data in buffe: consumer has nothing to consume: data race
- buffer is full: no space for producer to produce - buffer is full: no space for producer to produce: busy waiting
private vars private vars
- in: next pos in buf to be writted - in: next pos in buf to be writted
@ -24,4 +24,32 @@ shared variables
- counter: number of items in buffer - counter: number of items in buffer
waiting waiting
- busy" - busy: proces keeps checking (if buffer is still full) wasting CPU time
- non busy: suspend the process
soution with shared array
```c
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
![data race problem slide|400](https://i.imgur.com/qIz6FGU.png)