るりまサーチ

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

別のキーワード

  1. _builtin end
  2. ripper end_seen?
  3. _builtin exclude_end?
  4. _builtin end_with?
  5. io seek_end

ライブラリ

キーワード

検索結果

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

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

...また、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 (18113.0)

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

...また、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 (84.0)

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

...onVariable.new

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

...
}
}

b = Thread.start {
mutex.synchronize {
# 上の条件を満たすための操...
...mutex = Mutex.new
@q = []
end


def count
@q.size
end


def enq(v)
@mutex.synchronize{
@full.wait(@mutex) if count == @max
@q.push v
@empty.signal if count == 1
}
end


def deq
@mutex.synchronize{
@empty.wait(@mutex)...
...}
end


alias send enq
alias recv deq
end


if __FILE__ == $0
q = TinyQueue.new(1)
foods = 'Apple Banana Strawberry Udon Rice Milk'.split
l = []

th = Thread.new {
for obj in foods
q.send(obj)
print "sent ", obj, "\n"
end

q.send nil...

Monitor (66.0)

スレッドの同期機構としてのモニター機能を提供するクラスです。 また同じスレッドから何度も lock できる Mutex としての機能も提供します。

...d

# consumer
Thread.start do
loop do
mon.synchronize do
empty_cond.wait_while { buf.empty? }
print buf.shift
end

end

end


# producer
while line = ARGF.gets
mon.synchronize do
buf.push(line)
empty_cond.signal
end

end

//}

2回ロックしてもデッドロック...
...uby]{
require 'monitor'
mon = Monitor.new
mon.synchronize {
mon.synchronize {
}
}
//}

Thread::Mutex ではデッドロックになります。

//emlist[Mutex でデッドロックになる例][ruby]{
mx = Mutex.new
mx.synchronize {
mx.synchronize {
}
}
# => deadlock; recursive locking (Thr...

MonitorMixin (66.0)

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

...lude したり、オブジェクトに
Object#extend したりすることでそのクラス/オブジェクトに
モニタ機能を追加します。

=== 例

//emlist[消費者、生産者問題の例][ruby]{
require 'monitor'

buf = []
buf.extend(MonitorMixin) # 配列にモニタ機能を追...
...p do
buf.synchronize do # ロックする
empty_cond.wait_while { buf.empty? } # 配列が空である間はロックを開放して待つ
print buf.shift # 配列が空でなくなった後ロックを取得してこの行を実行
end
# ロックを開放
end

end


# producer...
...while line = ARGF.gets
buf.synchronize do # ロックする
buf.push(line) # 配列を変更(追加)
empty_cond.signal # 配列に要素が追加されたことを条件変数を通して通知
end
# ここでロックを開放
end

//}

=== 初期化

MonitorMixin は初期化される...

絞り込み条件を変える

Mutex_m (24.0)

スレッド同期機構である Thread::Mutex のモジュール版です。クラスに Module#include することでそのクラスに Mutex 機能を持たせることができます。 また、普通のオブジェクトを Object#extend により Mutex にする事ができます。

...Object#extend により Mutex にする事ができます。

このモジュールによるロックは再入不可能です。再入可能な同等品が必要な場合は
Sync_m の利用を考えてください。

「mu_」の付かないメソッド(Mutex_m#lock, Mutex_m#synchronize,
Mutex_m...
...ire "mutex_m"
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 sectio...

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

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

...w
cv = ConditionVariable.new
flg = true

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

puts "a2"
}
}
}

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

sleep 1

# => a1
# => a1
# => a1
#...

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

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

...w
cv = ConditionVariable.new
flg = true

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

puts "a2"
}
}
}

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

sleep 1

# => a1
# => a1
# => a1
# =>...

Mutex (12.0)

Mutex(Mutal Exclusion = 相互排他ロック)は共有データを並行アクセスから保護する ためにあります。Mutex の典型的な使い方は(m を Mutex オブジェクトとします):

...的な使い方は(m を Mutex オブジェクトとします):

m.lock
begin
# m によって保護されたクリティカルセクション
ensure
m.unlock
end


または、より簡単に

m.synchronize {
# m によって保護されたクリティカルセクション
}...

Thread::Mutex (12.0)

Mutex(Mutal Exclusion = 相互排他ロック)は共有データを並行アクセスから保護する ためにあります。Mutex の典型的な使い方は(m を Mutex オブジェクトとします):

...的な使い方は(m を Mutex オブジェクトとします):

m.lock
begin
# m によって保護されたクリティカルセクション
ensure
m.unlock
end


または、より簡単に

m.synchronize {
# m によって保護されたクリティカルセクション
}...

絞り込み条件を変える