9

freebsd の port ソースから perl 5.16 (およびその他のバージョン) をコンパイルするとき、オプション 'THREADS' と 'PTHREAD' の違いは何だろうか?

PTHREAD は posix スレッドですか? (-pthread のため) もしそうなら、'THREADS' よりも優先されますか? (事前に選択されているように見えるため)freebsdでも?一方、「THREADS」(カーネルスレッド?) とは何ですか? 長所と短所は何ですか?

1 回のインストールで両方を使用できますか? それは理にかなっていますか?

私が見る限り、perl と組み合わせて使用​​できるものはあまりありません。

どうもありがとうジミー

4

1 に答える 1

19

もちろん、スレッドの使用は他の人が説明しているとおりです。

pthreadとのリンクは、perlが-pthreadフラグを使用して構築されていることを意味します。これには微妙ですが重要な効果があります。これは、perlが起動すると、スレッドの状態を維持するlibcデータが初期化されることを意味します。これは、スレッド化されたライブラリでperlがdlopen()を呼び出すと、ハングするのではなく、正しく機能することを意味します。

PS。私は実際、PTHREADオプションを作成してポートにコミットした人です。私は実際に、いくつかのスレッド化されたライブラリをdlopen()して、perlをハングさせるいくつかのperlモジュールを発見しました。理由を理解するのに少し時間がかかりました。私を信じてください、あなたはPTHREADオプションをオンにしたいです。私は実際にそれをオフにするオプションを削除することを考えています。詳細については、FreeBSD PR 163512および163878を参照してください。PerlがFreeBSDでデフォルトでこれを使用するように、おそらくこのオプションをアップストリームにプッシュする必要があります。dlopen()を呼び出す可能性のあるものはすべて、実際には-pthreadを使用してビルドする必要があります。

于 2012-11-27T20:29:15.780 に答える