All pastes #823596 Raw Edit

Something

public text v1 · immutable
·published 2007-12-19 14:14 UTC
rendered paste body
buildingenter()
s1.wait
NR.wait
	D.wait
		d1.lock
		s1.release
	D.release
	D.wait
		d2.lock
		d1.unlock
	D.release
	D.wait
		d3.lock
		d2.unlock
	D.release
	D.wait
		d3.unlock
	puts 'entered building'
NR.release


buildingleave()
s2.wait
...
puts 'left building'
	

rotate()
while
	NR.wait
		if(d1/d2/d3/d4)	rotate90
	NR.release	



i'm trying to implement a rotating door of a building (which is divided to 4 parts, each could contain only 1 thread), with two queues of 'threads', for entry and exit, which are going in and out of the building.

'rotate' is a function which rotates the door by 90 degrees (and hence forwarding the lines by 1)
and rotate shouldnt work until threads have exited or entered the door.


I'm stuck with getting them to switch turns without getting a deadlock