プログラム

詳しいことは分かりませんが、Squeakの場合、
スレッドの切り替えは、何ていうか名前は忘れちゃったけど、
バイトコードの1バイトとして表現される処理の度だった気がしている。
だから、アトミック性が保障されるのは、
バイトコードの中の1バイトで表現される処理だ、と私は信じている。
代入処理はそういうやつの1つだった気がするので、特に同期を施すことなく、
複数のプロセスから代入を行っている。


今日はC#を弄くってみた。
ある程度信頼できそうな本を買う予定だったのですが、
起きたらすっかり夜だったので、結局本は買わず。
というわけでかなり手探りな状態。
なんとなくスレッドを作って喜んだりしていたわけですが、
何がアトミックなのかとかが全然分からなく手も足も出ませんでした。


実は未だにSqueakの外部プラグインでの同期処理の正しい作法が分からない。
SqueakのVirtualMachineにsignalSemaphoreWithIndexというのがありますが、
これはOSのスレッドを使っている場合にはアンセーフなはず。


Squeakはinterpretのループの中でWindowsのメッセージを処理していたはずなので、
メインウィンドウのプロシージャーを横取りして、
signalSemaphoreWithIndexを行うメッセージを作って、
メインウィンドウにそのメッセージをポスト、
という面倒臭いことを私はやっているのですが、
本当にそれで良いのかが分からない。
複数の外部DLLが同じことをやると、プロシージャーを元に戻すことを保障出来なくなる気がする。
このあたりはWindowsの知識が決定的に不足。。。
やはりOSのプロセス作るなってことか。