D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
usr
/
lib
/
ruby
/
gems
/
3.0.0
/
gems
/
rbs-1.0.4
/
stdlib
/
monitor
/
0
/
Filename :
monitor.rbs
back
Copy
# Use the Monitor class when you want to have a lock object for blocks with # mutual exclusion. # # require 'monitor' # # lock = Monitor.new # lock.synchronize do # # exclusive access # end class Monitor public def enter: () -> nil def exit: () -> nil def mon_check_owner: () -> nil alias mon_enter enter alias mon_exit exit def mon_locked?: () -> bool def mon_owned?: () -> bool alias mon_synchronize synchronize alias mon_try_enter try_enter def new_cond: () -> ::MonitorMixin::ConditionVariable def synchronize: [T] () { () -> T } -> T def try_enter: () -> bool # for compatibility alias try_mon_enter try_enter def wait_for_cond: (::MonitorMixin::ConditionVariable, Numeric? timeout) -> untyped end module MonitorMixin def self.extend_object: (untyped obj) -> untyped public # Enters exclusive section. def mon_enter: () -> nil # Leaves exclusive section. def mon_exit: () -> nil # Returns true if this monitor is locked by any thread def mon_locked?: () -> bool # Returns true if this monitor is locked by current thread. def mon_owned?: () -> bool # Enters exclusive section and executes the block. Leaves the exclusive section # automatically when the block exits. See example under `MonitorMixin`. def mon_synchronize: [T] () { () -> T } -> T # Attempts to enter exclusive section. Returns `false` if lock fails. def mon_try_enter: () -> bool # Creates a new MonitorMixin::ConditionVariable associated with the Monitor # object. def new_cond: () -> ::MonitorMixin::ConditionVariable alias synchronize mon_synchronize # For backward compatibility alias try_mon_enter mon_try_enter private # Use `extend MonitorMixin` or `include MonitorMixin` instead of this # constructor. Have look at the examples above to understand how to use this # module. def initialize: (*untyped) { (*untyped) -> untyped } -> void def mon_check_owner: () -> nil # Initializes the MonitorMixin after being included in a class or when an object # has been extended with the MonitorMixin def mon_initialize: () -> untyped end # FIXME: This isn't documented in Nutshell. # # Since MonitorMixin.new_cond returns a ConditionVariable, and the example above # calls while_wait and signal, this class should be documented. class MonitorMixin::ConditionVariable public # Wakes up all threads waiting for this lock. def broadcast: () -> Thread::ConditionVariable # Wakes up the first thread in line waiting for this lock. def signal: () -> Thread::ConditionVariable # Releases the lock held in the associated monitor and waits; reacquires the # lock on wakeup. # # If `timeout` is given, this method returns after `timeout` seconds passed, # even if no other thread doesn't signal. def wait: (?Numeric? timeout) -> untyped # Calls wait repeatedly until the given block yields a truthy value. def wait_until: () { () -> boolish } -> untyped # Calls wait repeatedly while the given block yields a truthy value. def wait_while: () { () -> boolish } -> untyped private def initialize: (Monitor monitor) -> void end