スレッド局所記憶について、情報が。。

http://d.hatena.ne.jp/hjym_u/20111228/1325076328
マルチスレッドまわりが強化されたMeCab 0.99


PC6001V のVer.1.13で使われるようになった、Thread-Local Storage(スレッド局所記憶)ですが、やはり、Macからは使えないようです。

__threadは、グローバル変数やstatic変数をスレッドごとに利用するためのC/C++のキーワードで、この仕組みにはThread-Local Storage (TLS)という名前が付けられています。ところが、この__threadはMacではサポートされていないようで、その代わりにpthread_setspecificなどを使うか、gcc-4.5以降を利用する必要があるとのことです。Mac OS Xは、Machカーネルを採用しているので、Linuxやその他Unixと、こんなところに違いがあるのですね。


pthread_setspecificなどを使うか、gcc-4.5以降を利用する

ですか。。

pthread_setspecificって、よく分かってないのですが、これで、スレッド毎にローカルデータを付けられるようです。
でも、よく分かってないのに、PGをいじるのは、あまり自信がないです。


ちなみに、gcc 4.5 は、Macには入ってません。
Appleは、途中から、llvmに浮気したため、これからも入らない可能性が有りますね。。(´・ω・`)


Macportsで、gcc 4.5 入れてみて、ビルドしてみたのですが、まず、-arch i386 というオプションがunknown と言われてしまいました。それを外してビルドすると、全然関係ないはずの、Appleのヘッダファイル(CFBundle.h) でコンパイルエラーで停止しました。。orz


やっぱり、Apple謹製じゃないから、だめなのかな?


ちなみに、__thread の入っているthread.cpp をコンパイルしたら、普通にコンパイルが通ったので、gcc 4.5 は、Thread-Local Storage (スレッド局所記憶)に、対応しているというのは、本当のようです。。

(ただし、Thread-Local Storage をエミュレートしているそうなので、遅いそうですが。。)