Ruby 1.8.7 リファレンスマニュアル > ライブラリ一覧 > mutex_mライブラリ > Mutex_mモジュール
クラスの継承リスト: Mutex_m
スレッド同期機構である Mutex のモジュール版です。クラスに Module#include することでそのクラスに Mutex 機能を持たせることができます。 また、普通のオブジェクトを Object#extend により Mutex にする事ができます。
このモジュールによるロックは再入不可能です。再入可能な同等品が必要な場合は Sync_m の利用を考えてください。
「mu_」の付かないメソッド(Mutex_m#lock, Mutex_m#synchronize, Mutex_m#locked?, Mutex_m#try_lock, Mutex_m#unlock) はモジュールにincludeした場合には定義されません。
クラスに Module#include する例
class Foo include Mutex_m ... end obj = Foo.new obj.synchronize do # 危険領域(critical section) ... end
オブジェクトに Object#extend する例
require "mutex_m" obj = Object.new obj.extend(Mutex_m) obj.lock # 危険領域(critical section) ... obj.unlock
append_features(klass) -> Class | nil
[permalink][rdoc]ユーザが直接、使うことはありません。
[SEE_ALSO] Module#append_features
define_aliases(klass) -> Class
[permalink][rdoc]ユーザが直接、使うことはありません。
extend_object(module) -> Module
[permalink][rdoc]ユーザが直接、使うことはありません。
[SEE_ALSO] Module#extend_object
mu_lock -> self
[permalink][rdoc]lock -> self
self をロックします。一度にひとつのスレッドしかロックできません。 既にロックされている mutex に対してロックを行おうとしたスレッドは ロックが解放されるまで、実行が停止されます。
self を返します。
mu_locked? -> bool
[permalink][rdoc]locked? -> bool
self がロックされている時、真を返します。
mu_extended -> Mutex
[permalink][rdoc]Mutex_m.extend_object から呼び出されます。 ユーザが直接使うことはありません。
mu_synchronize { ... } -> object
[permalink][rdoc]synchronize { ... } -> object
self のロックを取得し、ブロックを実行します。実行後に必ずロックを解放します。
ブロックで最後に評価した値を返します。
mu_try_lock -> bool
[permalink][rdoc]try_lock -> bool
self をロックしようとして、成功した場合、真を返し、ロックを得ます。
ロックできなかった場合にはブロックせず偽を返します。
mu_unlock -> self | nil
[permalink][rdoc]unlock -> self | nil
ロックを解放します。ロック待ちになっていたスレッドの実行は再開されます。
self がロックされていなければ nil を返します。そうでなければself を返します。