英語版
このページの英語版を見る

core.thread.threadbase

スレッドベース・モジュールはOSに依存しないコードを提供する。 を提供する。
License:
Distributed under the Boost Software License 1.0. (See accompanying file LICENSE)
Authors:
Sean Kelly, Walter Bright, Alex Rønne Petersen, Martin Nowak
class ThreadException: object.Exception;
スレッド例外の基底クラス。
class ThreadError: object.Error;
割り当てが利用できないときにGC内部の関数に使用されるスレッドエラーの基本クラス。
abstract class ThreadBase;
pure nothrow @nogc @safe this(void function() fn, size_t sz = 0);
package nothrow @nogc bool destructBeforeDtor();
このオブジェクトによって使用された残りのリソースをクリーンアップする。
abstract Throwable join(bool rethrow = true);
このスレッドが完了するのを待つ。 スレッドが未処理の例外の結果として終了した場合 未処理の例外の結果としてスレッドが終了した場合、この例外は再投げされる。
Parameters:
bool rethrow このスレッドが終了する原因となった未処理の例外をすべて投げ直す。 を投げ直す。
Throws:
操作に失敗した場合はThreadException。 結合スレッドで処理されなかった例外。
Returns:
rethrow = falseの場合はこのスレッドで処理されない例外、そうでない場合はNULL そうでなければ
final @nogc @property @safe ThreadID id();
このスレッドのOS識別子を取得する。
Returns:
スレッドがまだ開始されていない場合は ThreadID.init. そうでなければ、WindowsではGetCurrentThreadId の結果を返す、 POSIXではpthread_self
この値は現在のプロセスで一意である。
final @nogc @property @safe string name();
このスレッドのユーザが読めるラベルを取得する。
Returns:
このスレッドの名前。
final @nogc @property @safe void name(string val);
このスレッドのユーザが読めるラベルを設定する。
Parameters:
string val このスレッドの新しい名前。
final @nogc @property @safe bool isDaemon();
このスレッドのデーモン・ステータスを取得する。 ランタイムは ランタイムは、プロセスを終了する前にすべての通常のスレッドが完了するのを待つが、デーモンスレッド スレッドは事実上無視されるので、プロセスの終了を妨げない。 の終了を妨げない。 事実上、デーモン・スレッドは、プロセスが終了するときにOSによって自動的に終了される。 される。
Returns:
デーモン・スレッドの場合はtrueを指定する。
final @nogc @property @safe void isDaemon(bool val);
このスレッドのデーモン・ステータスを設定する。 ランタイムは ランタイムは、プロセスを終了する前にすべての通常のスレッドが完了するのを待つが、デーモンスレッド スレッドは事実上無視されるため、プロセスの終了を妨げない。 の終了を妨げない。 事実上、デーモン・スレッドは、プロセスが終了するときにOSによって自動的に終了される。 される。
Parameters:
bool val このスレッドの新しいデーモン状態。
final nothrow @nogc @property bool isMainThread();
このスレッドがメイン・スレッドであるかどうかをテストする。 ランタイムを初期化した
Returns:
スレッドがメインスレッドの場合、trueを返す
nothrow @nogc @property bool isRunning();
このスレッドが実行中かどうかをテストする。
Returns:
スレッドが実行中であればtrue、実行中でなければfalseを返す。
static nothrow @nogc @safe ThreadBase getThis();
呼び出し元のスレッドへの参照を提供する。
Returns:
呼び出しスレッドを表すスレッド・オブジェクト。 このオブジェクトを削除した結果は このオブジェクトを削除した結果は未定義である。 現在のスレッドが ランタイムにアタッチされていない場合は、NULL参照が返される。
static ThreadBase[] getAll();
現在システムによって追跡されているすべてのスレッドのリストを提供する。 返された配列内のスレッドは、もはや実行されていないかもしれないことに注意すること ( ThreadBase.isRunning).
Returns:
現在システムが追跡しているすべてのスレッドへの参照を含む配列。 への参照を含む配列。 含まれる オブジェクトを削除した結果は未定義である。
static int opApply(scope int delegate(ref ThreadBase) dg);
現在システムによって追跡されているすべてのスレッドを操作する。 含まれる スレッド・オブジェクトを削除した結果は未定義である。 コールバックに渡されたスレッドは、もはや実行されないかもしれないことに注意すること ( ThreadBase.isRunning).
Parameters:
int delegate(ref ThreadBase) dg デリゲートとして提供されたコード。
Returns:
すべてのエレメントを訪問した場合はゼロ、そうでない場合はゼロでない。
package pure nothrow @nogc @safe this(size_t sz = 0);
package static nothrow @nogc void setThis(ThreadBase t);
package(core.thread) final nothrow @nogc void pushContext(StackContext* c);
package(core.thread) static nothrow @nogc @property Mutex slock();
package(core.thread) static nothrow @nogc void add(StackContext* c);
package static nothrow @nogc void incrementAboutToStart(ThreadBase t);
nothrow @nogc void thread_term_tpl(ThreadT, MainThreadStore)(ref MainThreadStore _mainThreadStore);
スレッド・モジュールを終了する。その後に他のスレッドルーチンを呼んではならない。 を呼び出すことはできない。
nothrow @nogc bool thread_isMainThread();
ThreadT thread_attachThis_tpl(ThreadT)();
Dランタイムで使用するために呼び出しスレッドを登録する。 このルーチンが が呼び出された場合、何も実行されない。

注釈: このルーチンは、呼び出されてもスレッドローカル静的コンストラクタを実行しない。 このルーチンは、呼び出されてもスレッドローカルの静的コンストラクタを実行しない。 Dスレッドとしての完全な機能が必要な場合、以下の関数が呼ばれなければならない。 を呼び出す必要がある:

extern (C) void rt_moduleTlsCtor();

nothrow @nogc void thread_detachThis();
呼び出し元のスレッドをランタイムに登録しない。 このルーチンが が呼び出された場合、結果は未定義である。

注釈: このルーチンは、スレッドローカルを実行しない。 このルーチンは、呼び出されたときにスレッドローカルの静的デストラクタを実行しない。 Dスレッドとしての完全な機能が必要な場合は、以下の関数を呼び出す必要がある。 を thread_detachThis の前に呼ばなければならない。 特に、スレッドがプログラム終了前の不確定な時点で切り離される場合は、以下の関数を thread_detachThis の前に呼び出す必要がある:

extern(C) void rt_moduleTlsDtor();

void thread_detachByAddr(ThreadID addr);

nothrow @nogc void thread_detachInstance(ThreadBase t);
指定されたスレッドをランタイムに登録しない。 このルーチンが が呼び出された場合、結果は未定義である。

注釈: このルーチンは、呼び出されたときにスレッドローカル静的デストラクタを実行しない。 このルーチンは、呼び出されたときにスレッドローカルの静的デストラクタを実行しない。 Dスレッドとしての完全な機能が必要な場合は、以下の関数を呼び出さなければならない。 を呼び出す必要がある。 特に、スレッドがプログラム終了前の不確定な時点で切り離される場合は、切り離されたスレッドによって以下の関数が呼び出されなければならない:

extern(C) void rt_moduleTlsDtor();

static ThreadBase thread_findByAddr(ThreadID addr);
すべてのスレッドのリストから、与えられたスレッド識別子を持つスレッドを探す。
Parameters:
ThreadID addr 検索するスレッド識別子。
Returns:
スレッド識別子に関連付けられたスレッドオブジェクト。
nothrow @nogc void thread_setThis(ThreadBase t);
現在のスレッドを特定の参照に設定する。外部で作成されたスレッド 外部で作成されたスレッド(Cコードなど)を扱う場合にのみ使用する。 この関数の主な用途は、ThreadBase.getThis() が、次のような場面で適切な値を返さなければならない場合である。 が、例えば TLS のデストラクタなどで、適切な値を返さなければならない場合である。つまり つまり、自分が何をしているのかわかっていない限り、この関数には触らないことだ。
Parameters:
ThreadBase t 現在のスレッドへの参照。NULLかもしれない。
void thread_joinAll();
現在実行中のすべての非デーモンスレッドを結合する。 これは スキャンがデーモンスレッドだけで構成されるまで、スレッドリストを連続的にスキャンする。 デーモンスレッドのみから構成されるまで、スレッドリストを通して連続的なスキャンを実行することによって行われる。
nothrow void thread_resumeAll();
ガベージコレクションを実行する "stop the world"の呼び出しスレッド以外のすべてのスレッドを再開する。 が実行される。 この"関数"は、各先行スレッドに対して1回ずつ呼び出されなければならない。 スレッドが実際に再開される前に、この関数は thread_suspendAll の呼び出しごとに1回呼び出されなければならない。

その前に このルーチンの前に thread_suspendAll を呼び出す必要がある。

Throws:
実行中のスレッドで再開操作に失敗した場合は ThreadError となる。
enum ScanType: int;
thread_scanAllType によって実行されているスキャンの種類を示す。
stack
スタックやレジスタがスキャンされている。
tls
TLS データがスキャンされている。
alias ScanAllThreadsFn = void delegate(void*, void*) nothrow;

alias ScanAllThreadsTypeFn = void delegate(ScanType, void*, void*) nothrow;
スキャン関数。
nothrow void thread_scanAllType(scope ScanAllThreadsTypeFn scan);
ガベージコレクションのメインエントリーポイント。 提供されたデリゲート には、スタックとレジスタの両方の値を表す範囲が渡される。
Parameters:
ScanAllThreadsTypeFn scan スキャナ関数。 p1からp2 - 1までをスキャンする。

このルーチンの前に このルーチンの前に thread_suspendAll をコールしなければならない。

nothrow void thread_scanAll(scope ScanAllThreadsFn scan);
ガベージコレクションのメイン・エントリ・ポイント。 提供されたデリゲート には、スタック値とレジスタ値の両方を表す範囲が渡される。
Parameters:
ScanAllThreadsFn scan スキャナ関数。 p1からp2 - 1までをスキャンする。

このルーチンの前に このルーチンの前に thread_suspendAll をコールしなければならない。

@nogc void thread_enterCriticalRegion();
この呼び出しに続くコードがクリティカル領域であることを示す。この領域にあるコードはすべて この領域にあるコードは、呼び出し元のスレッドが thread_suspendAll の呼び出しによってサスペンドされる前に実行を終了しなければならない。 thread_suspendAll への呼び出しによって中断される前に、この領域内のコードは実行を終了しなければならない。
この"関数"は、特に、ロックが使用されていないときにガベージ・コレクタの不変性を維持するためのものである。 を維持するのに役立つ。
クリティカル領域はthread_exitCriticalRegionで抜ける。
警告: クリティカル・リージョンの使用は、非常にエラーを起こしやすい。例えば 例えば、クリティカル領域内でロックを使用すると、ロックを保持している他のスレッドがすでに中断している場合、簡単にデッドロックに陥る可能性がある。 がすでにサスペンドしている場合、デッドロックになりやすい。
クリティカル・リージョン」という用語と概念は、MonoのSGenガベージ・コレクターに由来する。 MonoのSgenガベージ・コレクターに由来する。

クリティカル領域とは 呼び出し元のスレッドはランタイムにアタッチされていなければならない。

@nogc void thread_exitCriticalRegion();
呼び出し元のスレッドがもはやクリティカル領域にないことを示す。この この関数を呼び出すと、スレッドは再び中断することができる。

この関数では 呼び出し元のスレッドはランタイムにアタッチされていなければならない。

@nogc bool thread_inCriticalRegion();
現在のスレッドがクリティカル領域にある場合はtrueを返し、そうでない場合はfalseを返す。

呼び出し元のスレッドはランタイムにアタッチされていなければならない。

package nothrow @nogc void onThreadError(string msg);
コレクション中のDのスレッドエラーに対するコールバック。割り当てができないので 事前に割り当てられた ThreadError が Error インスタンスとして使用される。
Returns:
は決して返さない。
Throws:
スレッドエラー。
enum IsMarked: int;
アドレスがGCによってマークされたかどうかを示す。
no
アドレスがマークされていない。
yes
アドレスがマークされている。
unknown
アドレスが GC 2011 によって管理されていない。
alias IsMarkedDg = int delegate(void* addr) nothrow;
isMarked コールバック関数。
nothrow void thread_processGCMarks(scope IsMarkedDg isMarked);
このルーチンは、ランタイムがGCのためのスレッドごとの特別な処理を処理することを可能にする。 を処理する。 これは、非スキャン・ポインタによって参照されているが、GCによって管理されよ うとしているメモリを考慮するために必要である。 これは、非スキャン・ポインタによって参照されているが、解放されようとしているメモリを考慮するために必要である。 これは現在 は配列のアペンド・キャッシュを意味する。
Parameters:
IsMarkedDg isMarked addr がマークされているかどうかをチェックするために使用される関数である。

このルーチンは、すべてのスレッドを再開する直前に呼び出されなければならない。 このルーチンは、すべてのスレッドを再開する直前に呼び出されなければならない。

nothrow @nogc void* thread_stackTop();
呼び出し元のスレッド内で現在アクティブなスタックのスタック・トップを返す。 スレッド内で現在アクティブなスタックのスタックトップを返す。

呼び出し元のスレッドはランタイムにアタッチされていなければならない。

Returns:
スタックトップのアドレス。
nothrow @nogc void* thread_stackBottom();
呼び出し元のスレッド内で現在アクティブなスタックのスタックトップを返す。 を返す。

呼び出し元スレッドはランタイムに接続されていなければならない。 呼び出し元スレッドはランタイムにアタッチされていなければならない。

Returns:
スタック・ボトムのアドレス。
package size_t ll_nThreads;
package ll_ThreadData* ll_pThreads;
package void[mutexClassInstanceSize] ll_lock;
package nothrow @nogc @property Mutex lowlevelLock();
package nothrow @nogc void initLowlevelThreads();
package nothrow @nogc void termLowlevelThreads();
package nothrow @nogc void ll_removeThread(ThreadID tid);
nothrow @nogc bool findLowLevelThread(ThreadID tid);
createLowLevelThread によってスレッドが作成されたかどうかをチェックする。
Parameters:
ThreadID tid プラットフォーム固有のスレッドID。
Returns:
true スレッドが によって作成され、まだ実行されている場合。createLowLevelThread