2025-01-11 00:25:52 +01:00

35 lines
641 B
GDScript

class_name ReadWriteLock
var _w_lock : Lock
var _num_r_lock : Lock
var _num_r : int
func _init():
self._w_lock = Lock.new()
self._num_r_lock = Lock.new()
self._num_r = 0
func r_lock():
self._num_r_lock.lock()
self._num_r += 1
if self._num_r == 1:
self._w_lock.lock()
self._num_r_lock.unlock()
func r_unlock():
if self._num_r <= 0:
LockNotAquiredError.new(
"Read-Write-Lock was released but nobody aquired it!").throw()
return
self._num_r_lock.lock()
self._num_r -= 1
if self._num_r == 0:
self._w_lock.unlock()
self._num_r_lock.unlock()
func w_lock():
self._w_lock.lock()
func w_unlock():
self._w_lock.unlock()