猫型エンジニアのブログ

プログラム/ネットワーク系の技術関連をまとめたページです 

言語のしくみ その8

 当たり前だけど適当な変数を用いてロック代わりにするのはダメなんですね。

4−5 ロックフリーアルゴリズム

 全体の流れとしては「スレッドセーフを実現する手法の一つとしてロックがあるが、ロックは処理効率が低下」する。そのためロックを用いないスレッドセーフの実現方法として

  • スレッドセーフ:そのコードを複数のスレッドが同時並行的に実行しても問題が発生しないこと。

 mutexロックを用いた排他制御はスレッドセーフであるが、あるスレッドがロックをかけている間は他のスレッドはロック解除を待つためスレッドが停止する。よってその間処理性能が低下してしまう。

  • ロックフリー:アトミック操作を用いてロックを用いずに平行処理を実現する手法。

 コンピュータ上で分割できない操作とは実は少ない。CPUの機械語の1命令は内部的には複数の小さな命令群に分割され、最適化されながら実行されている。よってアトミックである保証はなされない。ロックフリーではCPUのアトミック命令(CAS)を用いてロックを用いずにスレッドセーフを実現する。