2012-01-21 5 views
0

私はpthreadのC++プログラムをコーディングしています。これはpthreadのC++プログラムの移植性のないエラーですか?

私はエラーを得た: 「pthread_getunique_npは」「*のNP」とpthread_getunique_np等、この範囲で

を宣言されていない移植できません。

私はオンラインの記事から解決策を見つけることができません。

私は_npがPOSIX標準ではないことを知っています。

これを回避するには?ヘッダーファイルやその他の代替ファイルを含める必要がありますか?

おかげ

+1

は、異なる機能を使用して...?あなたのより広い目標を見て、別の解決策を見つけてください。 –

答えて

3

多くのシステムでは、スレッドのpthread_tを一意の識別子として使用できます。これはpthread_self(3)(POSIX)で取り出すことができます。 pthread_equal(3)関数を使用して、2つの同値をテストすることができます。

pthread_t threadID = pthread_self(); 
if (pthread_equal(threadID, someOtherID) != 0) 
    /* Branch based on being the same thread */ 
else 
    /* Branch based on being different threads */ 

は、私の知る限り、pthread_getunique_np()識別子としてpthread_tを使用するよりも異なる固有の整数IDを返します。多くのシステムでは、pthread_self(3)とf pthread_getunique_np()の両方から返される値は同じです。実際には、pthread_tユニークな整数を取得する必要があります。

いずれにしても、呼び出されたスレッドのIDを返すためにpthread_self(3)が必要です。この移植可能な関数を必要な方法で使用できるはずです。

(情報IBMpthread_getunique_np()

0

_npサフィックスは、非ポータブルを意味します。言い換えれば、POSIX標準には含まれていないため、POSIXシステムで使用できることが保証されていません。

+0

ありがとう、私はそれを知っています。私はそれを回避する方法を知る必要があります。 – user1002288

0

pthread_tを一意の識別子として使用してください。私はおそらくpthread_getunique_npの戻り値と同じである可能性が最も高いです。

関連する問題