ToDo:
SADのシグナルハンドリングをごそごそ掃除中
勘のいい人なら名前で分かると思いますが、 sigpending(2), sigsusped(2), sigprocmask(2)システムコールへの インターフェース関数を実装したので、SADScript側から シグナルマスクの制御が可能に成りました。 最終目標は、SigAction[](sigaction(2))を実装して SADScript関数をシグナルへのコールバックとして 呼び出せるようにすること!
そのためには、シグナルで割り込まれた時に SADインタープリタの コンテキストを切替える必要が有り、少なくともtfstk_ common blockを 入れ換える必要が有ります。
ここで使うSADインタープリタのコンテキスト切替えを拡張すると 似非マルチスレッドが実装出来る予感。 最近の環境では、CPUコンテキストの切替えに 旧来のsetjmp/longjmpではなく、ucontext APIが使えるので 少し楽が出来そうです。 ただ、所詮は似非マルチスレッドなので最近のマルチコア環境の活用に 成らない罠 Orz
まともな POSIXスレッドとかを活用するには、Fortran側の 各種 common blockを Thread Local Storageに放り込むか、 直接アクセスせずにすべてアクセス関数でラップして スレッド毎の構造体に埋め込むとかが必要かな?
もちろん、内部ルーチンの Thread Safe化とかオブジェクト・ヒープ操作の Critical Section保護はどんな実装にしろ必要ですが....
カテゴリー: Admin | Emacs | EPICS | Fortran | FreeBSD | GCC | hgsubversion | IPv6 | KEKB | LHC | Lisp | LLVM | MADX | Ryzen | SAD | samba | tDiary | unix | WWW | YaSAI | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記