Next: , Previous: , Up: Pthreads   [Contents][Index]


6.27.1.2 Task-local data

Forth では、 すべてのタスクには、 「ユーザー領域」(user area)と呼ばれる、 基本的に同じタスク・ローカル・データがあります(初期の Forth システムはマルチ・ユーザー・システムであり、 タスクごとに 1 人のユーザーが存在することがよくありました)。 task の結果、 たとえばnewtask は、そのユーザー領域の開始アドレスです。 各タスクは、 システムによって定義されたユーザー・データ(例: base)を取得します。 あなたは以下を使用して追加のユーザー・データを定義できます:

User ( "name" –  ) gforth-0.2 “User”

name という名前のユーザー変数(1 セル)を作成します。
name 実行時: ( – addr )
addr は現在のタスクのユーザー変数のアドレスです。

AUser ( "name" –  ) gforth-0.2 “AUser”

name というユーザー変数を作成します( User とはクロス・コンパイラーでのみ違いが生じます)。

uallot ( n1 – n2  ) gforth-0.3 “uallot”

n1 バイトのユーザー・データを確保します。 確保した領域の先頭をユーザー領域内のオフセット値(n2)として返します。

UValue ( "name" –  ) gforth-1.0 “UValue”

name はユーザー value です。
name 実行時: ( – x )

UDefer ( "name" –  ) gforth-1.0 “UDefer”

name はタスク・ローカルの deferされたワードです。
Name 実行時: ( ... – ... )

ユーザー・データを扱う場合には、 以下のようなワード群もあります。

up@ ( – addr ) new “up-fetch”

addr は現在のタスクのユーザー領域の先頭です(addr は現在のタスクの task 識別子としても機能します)。

user' ( "name" – u  ) gforth-experimental “user”’

各タスクのユーザー領域のユーザー変数 name の、 ユーザー領域先頭からのオフセット値を U に返します。

's ( addr1 task – addr2  ) gforth-experimental “’s”

addr1 が現在のタスクのユーザー・データ内のアドレスである場合、 addr2 は 指定のタスク(task)のユーザー・データ内の対応するアドレスです。