新城@筑波大学情報です。こんにちは。

In article <031204021846.M0123954@ns.kobe1995.net>
        kaz@kobe1995.net (NAKAMURA Kazushi) writes:
> 中村和志@神戸です。こっちは月が沈んで、かに星雲(M1)の撮影中。
> この「メタレベル」のプログラムが書き難い、という表現がなんとなく
> ピンと来ます。libXtを使ってGUIアプリを作るが如く、低レベルの
> 細かいことまでゴリゴリ組んでいかないといけなくて疲れる。その割に
> 痒い所に手が届かなくて、SolarisやLinuxの独自拡張や仕様変更に
> 頼らざるを得ない局面に遭遇しがちと。

独自仕様か。独自拡張(_NP(non-portable)がついている)も人気が
出ると標準になります。recursive mutex とか。flockfile() は、
最初から recursive だったんだけど。

recursive mutex って、うまく作るとそんなに重くはないです。
self を使うといいです。

それで、どんな具体的な独自機能(Solaris,Linux)を使いましたか?

> 新城さんのスレッドライブラリの文献のありか教えてもらえますか?
> ポインタだけで構わないので。以前も見たような気がするのですが、
> その時は余り注目してなくてよく見なかったけど、今これ見て、急に
> とても見たくなりました。

どうもありがとうございます。メタレベルに正面から取り組んだの
は、これです。

[] Y.Shinjo and Y.Kiyoki: "A lightweight process facility
supporting meta-level programming", Parallel Computing,
Vol.22, No.11, pp.1429-1454 (1997).

スレッドにとってメタは、CPU。それで、CPU レベルの変数が使え
るといいというのが基本的な話です。あと、スケジューラなどのメ
タレベルのプログラムを全部、あるいは、部分的に取り替えられる
とか、スレッド間の同期プリミティブを簡単に書けるようにすると
か。別の視点では、次の論文にも出ています。

[] 新城, 清木: "並列プログラムを対象とした軽量プロセスの実現
方式",情報処理学会論文誌, Vol.33, No.1, pp.64-73 (1992).

[] 新城, 清木: "仮想プロセッサを提供するオペレーティング・シ
ステム・カーネルの構成法", 情報処理学会論文誌, Vol.34, No.3,
pp.478-488 (1993).

> これもソースを見て判断したわけではないです。GNU-0.0を使った時に
> ドキュメントに「並列動作するよ」もしくは「並列動作するように、
> GNUに手を加える時は注意してね」みたいなことが書いてあった読めた
> もので。

単にライブラリ関数が MT-Safe (Multithread-Safe) ということで
はなくて、1つのライブラリ関数の内部が並列に動作すると言うこ
とですか。ライブラリ関数自体が、CPUレベルの並列動作というの
は、なかなか思いつきません。CPUレベルではなくて、入出力とい
うのなら普通だと思いますけど。たとえば、fprintf(stdout,...)
と fprintf(stderr,...) が同時に動くとか。

Pthread の実装って、キャンセル(スレッドを殺す)が難しいんですよね。

\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報       \\