quartz/content/notes/20-sync-deadlock.md
2022-10-30 14:40:53 +13:00

1.0 KiB

title aliases tags
20-sync-deadlock
cosc204
lecture

Bounded buffer problem

slide|400

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

data race problem slide|400