123456789_123456789_123456789_123456789_123456789_

Class: Mutex

Relationships & Source Files
Inherits: Object
Defined in: thread.c,
thread.c

Overview

Mutex implements a simple semaphore that can be used to coordinate access to shared data from multiple concurrent threads.

Example:

require 'thread'
semaphore = Mutex.new

a = Thread.new {
  semaphore.synchronize {
    # access shared resource
  }
}

b = Thread.new {
  semaphore.synchronize {
    # access shared resource
  }
}

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.newMutex

Creates a new Mutex

Instance Attribute Details

#locked?Boolean (readonly)

Returns true if this lock is currently held by some thread.

#owned?Boolean (readonly)

Returns true if this lock is currently held by current thread. This API is experimental, and subject to change.

Instance Method Details

#lockself

Attempts to grab the lock and waits if it isn't available. Raises ::ThreadError if mutex was locked by the current thread.

#sleep(timeout = nil) ⇒ Numeric

Releases the lock and sleeps timeout seconds if it is given and non-nil or forever. Raises ::ThreadError if mutex wasn't locked by the current thread.

When the thread is next woken up, it will attempt to reacquire the lock.

Note that this method can wakeup without explicit Thread#wakeup call. For example, receiving signal and so on.

#synchronizeresult of the block

Obtains a lock, runs the block, and releases the lock when the block completes. See the example under Mutex.

#try_lockBoolean

Attempts to obtain the lock and returns immediately. Returns true if the lock was granted.

#unlockself

Releases the lock. Raises ::ThreadError if mutex wasn't locked by the current thread.