るりまサーチ

最速Rubyリファレンスマニュアル検索!
39件ヒット [1-39件を表示] (0.159秒)
トップページ > クエリ:-[x] > クエリ:r[x] > クエリ:RUBY[x] > クエリ:MonitorMixin[x]

別のキーワード

  1. _builtin to_r
  2. open3 pipeline_r
  3. matrix elements_to_r
  4. bigdecimal to_r
  5. fileutils rm_r

ライブラリ

クラス

モジュール

キーワード

検索結果

MonitorMixin (44072.0)

スレッドの同期機構としてのモニター機能を提供するモジュールです。

...費者、生産者問題の例][ruby]{
r
equire 'monitor'

buf = []
buf.extend(MonitorMixin) # 配列にモニタ機能を追加
empty_cond = buf.new_cond # 配列が空であるかないかを通知する条件変数

# consumer
Thread.start do
loop do
buf.synchronize do # ロックする...
...が空である間はロックを開放して待つ
print buf.shift # 配列が空でなくなった後ロックを取得してこの行を実行
end # ロックを開放
end
end

# producer
while line = ARGF.gets
buf.synchronize do # ロックする
buf.push(line) # 配列を変...
...期化

MonitorMixin
は初期化される必要があります。
上の例のように Object#extend を使って利用する場合は
自動的に初期化されます。

//emlist[extend する例][ruby]{
r
equire 'monitor'
buf = []
buf.extend(MonitorMixin)
//}

しかし、MonitorMixin をクラ...

MonitorMixin#mon_enter -> () (27218.0)

モニターをロックします。

...クできます。
既にモニターがロックされている場合は、ロックが開放されるまで
そのスレッドは待ちます。

Thread::Mutex#lock に相当します。
Mutex#lock と違うのは現在のモニターの所有者が現在実行されているスレッドである...
...

//emlist[例][ruby]{
r
equire 'monitor'
buf = []
buf.extend(MonitorMixin)
buf.mon_enter
buf.mon_enter
//}

Mutex#lock ではデッドロックが起きます。

//emlist[Mutex でデッドロックする例][ruby]{
m = Mutex.new
m.lock
m.lock # => deadlock; recursive locking (ThreadError)
//}...

Monitor#enter -> () (6228.0)

MonitorMixin#mon_enter の別名です。

...MonitorMixin#mon_enter の別名です。

Thread::Mutex#lock に相当します。
Thread::Mutex#lock と違うのは現在のモニターの所有者が現在実行されているスレッドである場合、
何度でもロックできる点です。ロックした回数だけ Monitor#exit を...
...されません。

//emlist[例][ruby]{
r
equire 'monitor'
mon = Monitor.new
mon.enter
mon.enter
//}

Thread::Mutex#lock ではデッドロックが起きます。

//emlist[Mutex でデッドロックする例][ruby]{
m = Mutex.new
m.lock
m.lock # => deadlock; recursive locking (ThreadError)
//}...

Monitor#wait_for_cond(cond, timeout) -> true (6228.0)

MonitorMixin::ConditionVariable 用の内部メソッドです。

...MonitorMixin::ConditionVariable 用の内部メソッドです。

@param cond Thread::ConditionVariable を指定します。
@param timeout タイムアウトまでの秒数。指定しなかった場合はタイムアウトしません。

@return Ruby 1.9 の頃からのバグで常に true を...
...返します。(16608)

//emlist[例][ruby]{
r
equire 'monitor'
m = Monitor.new
cv = Thread::ConditionVariable.new
m.enter
m.wait_for_cond(cv, 1)
//}...

Monitor#wait_for_cond(cond, timeout) -> bool (6222.0)

MonitorMixin::ConditionVariable 用の内部メソッドです。

...MonitorMixin::ConditionVariable 用の内部メソッドです。

@param cond Thread::ConditionVariable を指定します。
@param timeout タイムアウトまでの秒数。指定しなかった場合はタイムアウトしません。

@return タイムアウトしたときは false を返し...
...ます。それ以外は true を返します。

//emlist[例][ruby]{
r
equire 'monitor'
m = Monitor.new
cv = Thread::ConditionVariable.new
m.enter
m.wait_for_cond(cv, 1)
//}...

絞り込み条件を変える

Monitor#exit -> () (3122.0)

MonitorMixin#mon_exit の別名です。

...MonitorMixin#mon_exit の別名です。

enter でロックした回数だけ exit を呼ばなければモニターは解放されません。

モニターが解放されればモニターのロック待ちになっていた
スレッドが一つ実行を再開します。

@raise ThreadError...
...ックを持っていないスレッドが呼びだした場合に発生します

//emlist[例][ruby]{
r
equire 'monitor'
mon = Monitor.new
mon.enter
mon.enter
mon.exit
mon.exit
mon.exit # => current thread not owner (ThreadError)
//}...