Ruby 2.1.0 リファレンスマニュアル > ライブラリ一覧 > mutex_mライブラリ > Mutex_mモジュール

module 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した場合には定義されません。

[ruby-list:1991]

クラスに 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 define_aliases extend_object
インスタンスメソッド
lock mu_lock locked? mu_locked? mu_extended mu_synchronize synchronize mu_try_lock try_lock mu_unlock 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 -> ()[permalink][rdoc]
lock -> ()

self をロックします。一度にひとつのスレッドしかロックできません。 既にロックされている mutex に対してロックを行おうとしたスレッドは ロックが解放されるまで、実行が停止されます。

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 -> ()[permalink][rdoc]
unlock -> ()

ロックを解放します。ロック待ちになっていたスレッドの実行は再開されます。

[EXCEPTION] ThreadError:
ロックされていない場合に unlock を呼ぶと発生します