master-degree-notes/Concurrent Systems/test/Untitled.md

540 B

GLOB_MUTEX, W_MUTEX, PR_MUTEX and R_MUTEX semaphores init. at 1
R a shared register init. at 0

begin_read() :=
	PRR_MUTEX.down()
	R_MUTEX.down()
	R++ # currently active readers
	if R = 1 then
		PRW_MUTEX.down()
		GLOB_MUTEX.down()
	R_MUTEX.up()
	PRR_MUTEX.up()
	return

end_read() :=
	R_MUTEX.down()
	R--
	if R = 0 then
		GLOB_MUTEX.up()
		PRW_MUTEX.up()
	R_MUTEX.up()
	return

begin_write() :=
	PRR_MUTEX.down()
	PRW_MUTEX.down()
	PRW_MUTEX.up()
	GLOB_MUTEX.down()
	return

end_write() :=
	PRR_MUTEX.up()
	GLOB_MUTEX.up()
	return