マルチスレッド

スレッド内でシグナルを生成することはできない。 したがって、1つのシグナルスタックと1つのタイマーがEuslispのプロセスの 中で実現されている。 Solaris2の上では、メインの最上位レベルが分割されたスレッド内で実行する。



unix:thr-self [関数]

現在実行されているスレッドのID(整数)を返す。


unix:thr-getprio id [関数]

idで指定されたスレッドの実行優先順位を返す。


unix:thr-setprio id newprio [関数]
idで指定されたスレッドの実行優先順位にnewprioを設定する。 newprioが小さい数値の場合、優先順位が高いことを意味する。 言い替えれば、 newprioよりも大きな数値を持つスレッドは、CPUにアクセスされることが 少なくなる。 ユーザーは、実行優先順位をプロセスの値(普通はゼロ)よりも高く することはできない。


unix:thr-getconcurrency [関数]

並列に実行できるスレッドの数で表現される 並列度(整数)を返す。


unix:thr-setconcurrency concurrency [関数]

concurrencyの値は、プロセス内のLWPの数である。 もし、concurrensyがデフォルトの1ならば、 生成されたたくさんのスレッドがすべて実行可能であったとしても 順番に1つのLWPに割り当てられる。 もし、プログラムがマルチプロセッサマシン上で実行され、 同時に複数のCPUを利用したいならば、 concurrencyに1より大きい値を設定しなければならない。 concurrencyに大きな値を設定すると、オペレーティングシステムの リソースをたくさん消費する。普通、concurrencyはプロセッサの数 と同じかあるいは小さくすべきである。


unix:thr-create func arg-list &optional (size 64*1024) [関数]

sizeワードのlispスタックを持ち、sizeバイトのCスタック持つ 新しいスレッドを作成し、そのスレッド内でarg-listfuncを適用する。 スレッドは、どんな結果も呼びだし側に返すことができない。 この関数の使用は避けること。




2016-04-05