キーワード
- ConditionVariable (11)
- Enumerator (11)
- ErrNoWaitingThread (6)
- Fiber (11)
- Monitor (11)
- Queue (11)
- ThreadError (11)
- ThreadGroup (11)
- ThreadMember (11)
- ThreadsWait (6)
- WIN32OLE (11)
検索結果
-
Thread (38403.0)
-
スレッドを表すクラスです。スレッドとはメモリ空間を共有して同時に実行される制御の流れです。 Thread を使うことで並行プログラミングが可能になります。
...スレッドを表すクラスです。スレッドとはメモリ空間を共有して同時に実行される制御の流れです。
Thread を使うことで並行プログラミングが可能になります。
=== 実装
ネイティブスレッドを用いて実装されていますが、......おり、同時に実行される
ネイティブスレッドは常にひとつです。
ただし、IO 関連のブロックする可能性があるシステムコールを行う場合には
GVL を解放します。その場合にはスレッドは同時に実行され得ます。
また拡張ラ......リから GVL を操作できるので、複数のスレッドを
同時に実行するような拡張ライブラリは作成可能です。
=== スケジューリング
Ruby のスレッドスケジューリングはネイティブスレッドのそれを利用しています。
よって詳細... -
ThreadsWait
:: ErrNoWaitingThread (9017.0) -
終了を待つスレッドが存在しない時、発生します。
...終了を待つスレッドが存在しない時、発生します。
@see ThreadsWait#next_wait... -
ThreadGroup (6159.0)
-
スレッドグループを表すクラスです。グループに属する Thread をまとめて 操作することができます。
...スレッドグループを表すクラスです。グループに属する Thread をまとめて
操作することができます。
Thread は必ずいずれかひとつのスレッドグループに属します。
生成されたばかりの Thread は、生成した Thread のグループを......。
メインスレッドはデフォルトでは ThreadGroup::Default に属します。
: 例:
生成したすべてのThreadが終了するのを待つ
5.times {
Thread.new { sleep 1; puts "#{Thread.current} finished" }
}
(ThreadGroup::Default.list - [Thread.current]).e.......join}
puts "all threads finished"
対象の Thread が Thread を起こす可能性がある場合
(Thread.exclusive参照)
Thread.exclusive do
(ThreadGroup::Default.list - [Thread.current]).each {|th| th.join}
end
=== ThreadGroup#freeze と ThreadGroup#enclose の違い... -
ThreadError (6113.0)
-
Thread 関連のエラーが起きたときに発生します。
...Thread 関連のエラーが起きたときに発生します。
* カレントスレッドを Thread#join しようとしたとき
* Thread#join でデッドロックしそうになったとき
* 終了したスレッドを Thread#wakeup あるいは Thread#run しようとしたとき
*...... Thread.stop しようとしたとき
* Kernel.#throw がスレッド内で Kernel.#catch されないとき
* スレッドから return しようとしたとき
* イテレータを与えずにスレッドを生成しようとしたとき
* カレントスレッドの属するスレッド......グループが freeze されているときに、スレッドを生成しようとしたとき
* freeze あるいは enclose されているスレッドグループにスレッドを加えようとした時... -
Net
:: IMAP :: ThreadMember (6049.0) -
Net::IMAP#thread、 Net::IMAP#uid_thread から 得られるスレッドの木構造のノードを表すクラスです。
...Net::IMAP#thread、 Net::IMAP#uid_thread から
得られるスレッドの木構造のノードを表すクラスです。... -
ThreadsWait (6017.0)
-
複数スレッドの終了を待つ機能を提供します。
...複数スレッドの終了を待つ機能を提供します。... -
Thread
:: ConditionVariable (3101.0) -
スレッドの同期機構の一つである状態変数を実現するクラスです。
...スレッドの同期機構の一つである状態変数を実現するクラスです。
以下も ConditionVariable を理解するのに参考になります。
https://ruby-doc.com/docs/ProgrammingRuby/html/tut_threads.html#UF
=== Condition Variable とは
あるスレッド A が排他領......とします。スレッド A は現在空いていない
リソースが必要になったので空くまで待つことにしたとします。これはうまくいきません。
なぜなら、スレッド A は排他領域で動いているわけですから、他のスレッドは動くこと......@q が空になった場合、
あるいは満タンになった場合に Condition Variable を使って wait しています。
require 'thread'
class TinyQueue
def initialize(max=2)
@max = max
@full = ConditionVariable.new
@empty = ConditionVariable.new
@mutex =... -
Thread
:: Queue (3035.0) -
Queue はスレッド間の FIFO(first in first out) の通信路です。ス レッドが空のキューを読み出そうとすると停止します。キューになんら かの情報が書き込まれると実行は再開されます。
...スレッド間の FIFO(first in first out) の通信路です。ス
レッドが空のキューを読み出そうとすると停止します。キューになんら
かの情報が書き込まれると実行は再開されます。
最大サイズが指定できる Queue のサブクラス Thread:......:SizedQueue も提供されています。
=== 例
require 'thread'
q = Queue.new
th1 = Thread.start do
while resource = q.pop
puts resource
end
end
[:resource1, :resource2, :resource3, nil].each{|r|
q.push(r)
}
th1.join
実行すると以下のように出力... -
Fiber (79.0)
-
ノンプリエンプティブな軽量スレッド(以下ファイバーと呼ぶ)を提供します。 他の言語では coroutine あるいは semicoroutine と呼ばれることもあります。 Thread と違いユーザレベルスレッドとして実装されています。
...な軽量スレッド(以下ファイバーと呼ぶ)を提供します。
他の言語では coroutine あるいは semicoroutine と呼ばれることもあります。
Thread と違いユーザレベルスレッドとして実装されています。
Thread クラスが表すスレッドと違......=== 注意
Thread クラスが表すスレッド間をまたがるファイバーの切り替えはできません。
例外 FiberError が発生します。
//emlist[例:][ruby]{
f = nil
Thread.new do
f = Fiber.new{}
end.join
f.resume
#=> t.rb:5:in `resume': fiber called across threads (FiberEr... -
WIN32OLE (49.0)
-
OLEオートメーションサーバをRubyで操作するためのクラスです。
...マルチスレッドでの利用制限
注)以下の記述はWIN32OLEの将来のバージョンの仕様を規定するものではあり
ません。
WIN32OLEはシングルスレッドモードでCOMとインターフェイスします。このため、
ruby 1.9以降のRubyのThreadとネ......イティブスレッドが1対1で対応する実行環境
ではスレッドをまたがる呼び出しはエラーとなります。
excel = WIN32OLE.new('Excel.Application')
Thread.start do
workbook = excel.Workbooks.Open('workbook.xls') #=> HRESULT error code:0x800401f0
workbook.Pr......intOut
workbook.Close(:SaveChanges => false)
end.join
excel.Quit
発生するエラーはThreadの実行方法によって
0x800401f0(CO_E_NOTINITIALIZED)または0x8001010e(RPC_E_WRONG_THREAD)
です。...