スレッド

プログラミング

Load-Link/Store-Conditionalを見直した

CASを持たないアーキテクチャ CAS(Compare-And-Swap)を持っていないアーキテクチャで、アトミック操作はどうやるのか調べてみました。そういう部分ではLoad-Link/Store-Conditionalという命令を使って実現するみたいです。 PowerPCでは、lwarx/stwcx という命令。 ARMでは、ldrex/strex という...
プログラミング

スレッド同期のエトセトラ 第3回

Visual C++ 2005以降のvolatileのMS拡張 さらにvolatileについて、Microsoft独自拡張がなされてる記載を見つけました。 VisualStudio使って、Windowsアプリケーションを作る上ではこのルールだけでやっていけるのかもしれません。 Visual C++ 2005 には、volatile 変数へのアクセスに関して、...
プログラミング

スレッド同期のエトセトラ 第2回

前回のvolatileの変数を同期プリミティブに、な話の第2回です。 Microsoftの文章では、AcquireバリアはRead-Acquireバリア、ReleaseバリアはWrite-Releaseバリアと表現されています。確かにメモリバリアが使用される状況を考えると、アトミック変数代入時にはすなわち書き込みなので、Write-Releaseバリアという...
プログラミング

スレッド同期についてのエトセトラ

世の中には、volatile付けただけでその変数を同期プリミティブとして使用OKという誤った認識があるような気配だったので、ちょっと調べてみました。自分の認識を整理するためでもあるけど。 volatile修飾は何をしてくれるのか。まずはこれを考えてみます。 volatileはコンパイラによる最適化を抑制してくれます。これは、コンパイラによる命令の移動、メモリ...