るりまサーチ

最速Rubyリファレンスマニュアル検索!
49件ヒット [1-49件を表示] (0.113秒)
トップページ > ライブラリ:ビルトイン[x] > クエリ:_builtin[x] > クエリ:I[x] > クエリ:synchronize[x]

別のキーワード

  1. _builtin new
  2. _builtin inspect
  3. _builtin []
  4. _builtin to_s
  5. _builtin each

検索結果

Mutex#synchronize { ... } -> object (32209.0)

mutex をロックし、ブロックを実行します。実行後に必ず mutex のロックを解放します。

...します。

@raise ThreadError self 既にカレントスレッドにロックされている場合に発
生します。
また、Signal.#trap に指定したハンドラ内で実行
した場合に発生します。

//emlist[例][ruby]{
m...
...= Mutex.new
result = m.synchronize do
m.locked? # => true
# critical part
"result"
end
m.locked? # => false
result # => "result"
//}...

Thread::Mutex#synchronize { ... } -> object (32209.0)

mutex をロックし、ブロックを実行します。実行後に必ず mutex のロックを解放します。

...します。

@raise ThreadError self 既にカレントスレッドにロックされている場合に発
生します。
また、Signal.#trap に指定したハンドラ内で実行
した場合に発生します。

//emlist[例][ruby]{
m...
...= Mutex.new
result = m.synchronize do
m.locked? # => true
# critical part
"result"
end
m.locked? # => false
result # => "result"
//}...

Thread::ConditionVariable#signal -> self (14114.0)

状態変数を待っているスレッドを1つ再開します。再開された スレッドは Thread::ConditionVariable#wait で指定した mutex のロックを試みます。

...:ConditionVariable#wait
で指定した mutex のロックを試みます。

@return 常に self を返します。

//emlist[例][ruby]{
mutex = Mutex.new
cv = ConditionVariable.new
flg = true

3.times {
Thread.start {
mutex.synchronize {
puts "a1"
while (flg)
cv.wait(mut...
...ex)
end
puts "a2"
}
}
}

Thread.start {
mutex.synchronize {
flg = false
cv.signal
}
}

sleep 1

# => a1
# => a1
# => a1
# => a2
//}...

Thread.exclusive { ... } -> object (14108.0)

VM グローバルの Mutex をロックし、ブロックを実行します。

...動は 1.8 以前とは違います。
Thread.exclusive は VM グローバルの Thread::MUTEX_FOR_THREAD_EXCLUSIVE の
synchronize
を呼び出しているだけで、Thread.exclusive していないスレッドは動きます。
Mutex や Monitor などの他の排他制御の方法を検討し...
...は 1.8 以前とは違います。
Thread.exclusive は VM グローバルの Thread::MUTEX_FOR_THREAD_EXCLUSIVE の
synchronize
を呼び出しているだけで、Thread.exclusive していないスレッドは動きます。
Thread::Mutex や Monitor などの他の排他制御の方法を検討...
...ッドの挙動は 1.8 以前とは違います。
Thread.exclusive は VM グローバルの Mutex の
synchronize
を呼び出しているだけで、Thread.exclusive していないスレッドは動きます。
Thread::Mutex や Monitor などの他の排他制御の方法を検討してくだ...

Thread::ConditionVariable (14026.0)

スレッドの同期機構の一つである状態変数を実現するクラスです。

...一つである状態変数を実現するクラスです。

以下も ConditionVariable を理解するのに参考になります。

https://ruby-doc.com/docs/ProgrammingRuby/html/tut_threads.html#UF

=== Condition Variable とは

あるスレッド A が排他領域で動いていたとしま...
...状況を解決するのが Condition Variable です。

スレッド a で条件(リソースが空いているかなど)が満たされるまで wait メソッドで
スレッドを止めます。他のスレッド b において条件が満たされたなら signal
メソッドでスレッド a...
...= Mutex.new
cv = ConditionVariable.new

a = Thread.start {
mutex.synchronize {
...
while (条件が満たされない)
cv.wait(mutex)
end
...
}
}

b = Thread.start {
mutex.synchronize {
# 上の条...

絞り込み条件を変える

Thread::ConditionVariable#broadcast -> self (11014.0)

状態変数を待っているスレッドをすべて再開します。再開された スレッドは Thread::ConditionVariable#wait で指定した mutex のロックを試みます。

...:ConditionVariable#wait
で指定した mutex のロックを試みます。

@return 常に self を返します。

//emlist[例][ruby]{
mutex = Mutex.new
cv = ConditionVariable.new
flg = true

3.times {
Thread.start {
mutex.synchronize {
puts "a1"
while (flg)
cv.wait(mut...
...ex)
end
puts "a2"
}
}
}

Thread.start {
mutex.synchronize {
flg = false
cv.broadcast
}
}

sleep 1

# => a1
# => a1
# => a1
# => a2
# => a2
# => a2
//}...