システムソフトウエア特論(Office hour)

次はスレッドの使い方について。unixにおけるプロセスというのは資源の管理枠であり、メモリの内容やレジスタの内容が含まれるのに対し、スレッドは実行の流れを示す。
といった定義の話と、同期における問題。とくによく話題になるLostUpdate問題についての解説があった。
LostUpdateは排他制御がうまくいかない場合に起こる問題で、データベースでも起こりうる。二つのスレッドがあり、いずれもメモリ上の値をインクリメントするとする。インクリメントするためには、メモリ上の値を取得してその値に1を加え、またメモリに値を返すという3つの処理を行う。この3つの処理は不可分(atomic)であり、もしこの処理の途中にスレッド切り替えが起こると正しい処理にならない。
このため、資源側にロックをかける方法と処理に明示的に「排他実行」を行うという2種類のやり方がある。
というように、スレッドは同じメモリ空間を使用するため注意が必要だ。また、スレッド切り替えのタイミングによって故障になるなど、テストにタイミングという要素が絡んでくる。XPなどでみられる回帰テストなどでもこの点が問題になることが多い。