Sha256: f1f80cdaf4a63c2f560af22a53dfb240b19c4846c74b99d0d59906fb9f7b8338
Contents?: true
Size: 400 Bytes
Versions: 16
Compression:
Stored size: 400 Bytes
Contents
# frozen_string_literal: true export :Mutex # Implements mutex lock for synchronizing access to a shared resource class Mutex def initialize @waiting_fibers = [] end def synchronize fiber = Fiber.current @waiting_fibers << fiber suspend if @waiting_fibers.size > 1 yield ensure @waiting_fibers.delete(fiber) @waiting_fibers.first&.schedule snooze end end
Version data entries
16 entries across 16 versions & 1 rubygems