スレッド局所記憶について、情報が。。
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 をエミュレートしているそうなので、遅いそうですが。。)