2009-06-27 8 views
1

pthread_tは、一定のスレッドのために全面的に一定であると推測しましたが、私の実験ではこの仮定が間違っているように見えるようです。特定のスレッドのIDが寿命中一定でない場合は、pthread_tをどのように保存して、別のスレッドがpthread_joinを使用してスレッドが終了するまでブロックできますか?pthreadsスレッドのユニークで一定の識別子?

他の理由から、pthread_tに前後に変換できるスレッドの一意の識別子を取得する方法を知っておくと便利です。これを行う方法はありますか?

そこにはたくさんの素晴らしい情報がありますが、私はこれらの質問に役立つ回答を見つけるのに苦労しました。 私は得ることができる助け/助言に感謝します!

編集:また、すべての理由は分かりませんが、sleep(1)を追加して新しいスレッド(スレッドの機能内)の前で1秒間スリープ状態になると、これはおそらくわらとして把握していますが、pthread_tの値は新しいスレッドや何かの開始時に一時的に変更できますか?

+0

「exそれは仮説が偽であることを証明していますか?私の賭けは、問題は実験の中にあるということです。あなたの編集では、 'sleep()'を追加すると結果がその方向を指しているように見えるということです。 –

答えて

1

pthread_tは一意ではありませんが、pthread_equal()を使用すると、2つのスレッドIDが同じスレッドを参照しているかどうかを判断できます。

NAME 
    pthread_equal -- compare thread IDs 

SYNOPSIS 
    #include <pthread.h> 

    int 
    pthread_equal(pthread_t t1, pthread_t t2); 

DESCRIPTION 
    The pthread_equal() function compares the thread IDs t1 and t2. 

RETURN VALUES 
    The pthread_equal() function will return non-zero if the thread IDs t1 and t2 
    correspond to the same thread. Otherwise, it will return zero. 
+0

ありがとう!私はそれが基本的に私の問題だと思う。後で質問します: 私が得て保存した古い 'pthread_t'は、特定のスレッドを参照するために使用できますか? –

+1

こんにちは、quintus、あなたはこの回答を受け入れて、posix標準に違反する次回の試みについて新しい質問をしてみませんか? –

+0

@fistman:posix標準違反はどういう意味ですか?スレッドを扱うときに一意の識別番号を求めたいというルールにどういう意味があるのですか? @Beano:あなたのソリューションは有用ですが、私の問題は解決されていません。 pthread_equalは何も変更しませんでした。私はpthread_equalは、pthread_tが構造体であることがあるため、複数の数値が同じスレッドに関連付けられているためではないことに注意してください。任意の考え?... –

0

Aユニークとpthreadスレッドの定数識別子?

  • 多くのためこの回答を参照してくださいvoid*
  • pthread_create

にカウンタを割り当てる

  • 単調に増加するカウンタを使用する:あなたが開始する各スレッドを一意に識別することができようにするには

  • 詳細:How to assign unique ids to threads in a pthread wrapper?

    関連する問題