[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends-ml 12628] PowerPC での Atomic な関数 ( Load-Link/Store-Conditional)
高橋(智)です。
本日の読書会お疲れ様でした。
宿題となりました「Atomicな関数」の確認の件です。
Windows APIには、
http://msdn2.microsoft.com/en-us/library/ms683614.aspx
などにありますように
InterlockedIncrementやInterlockedCompareExchangeがあります。
Intel(IA)の命令は馴染みがあるでしょうから、とりあえずデバッガで覗くのは置いておいて...
先に、PowerPCでテストしてみました。
環境は、PowerPC G4, MacOSX10.3.9 (Darwin 7.9.0) です。
まず、MacOSXでは、
http://www.cocoabuilder.com/archive/message/cocoa/2002/6/23/56690
で紹介されているように IncrementAtomic や CompareAndSwap のような関数が公開されています。
ヘッダの場所は
/System/Library/Frameworks/CoreServices.framework/Versions/Current/Frameworks/
CarbonCore.framework/Versions/Current/Headers/DriverSynchronization.h
です。
以下のようなコードを書きました。
--------------------------------------------
#include <CoreServices/CoreServices.h>
int main (int argc, const char * argv[]) {
SInt32 x = 99;
IncrementAtomic(&x);
fprintf(stdout, "x=%d\n", x);
return 0;
}
--------------------------------------------
これをXcodeでビルド&実行して、アセンブラで覗きました。
すると...
[Load-Link/Store-Conditional]
http://ja.wikipedia.org/wiki/Load-Link/Store-Conditional
に紹介されているような「lwarx/stwcx」命令のところまで来ました。
画像として添付しましたのでご覧ください。
--
高橋智宏
Java読書会( http://www.javareading.com/bof/ )