2017-02-15 3 views
0

pthreads:同じスレッドIDを持つスレッドを作成するとどうなりますか?私は、このことによって、同じスレッドIDを持つ2つのスレッドを作成してい

pthread_t pt; 
int rc1, rc2, t1, t2; 
t1 = 0; 
t2 = 1; 
rc1 = pthread_create(&pt, NULL, func(), (void*)&t1); 
rc2 = pthread_create(&pt, NULL, func(), (void*)&t2); 

func()はちょうど私が見つけた何を渡されたパラメータ

を印刷し、出力は0の任意のその後1または1その後、0を得ることです。ここで実際に何が起こっていますか?とにかくこの場合は2つのpthread_tの値を使用するのと違うのですか?

+0

2つの 'pthread_t'オブジェクトの使用との違いは、この場合は最初のスレッドに参加できないということです。 – EOF

答えて

2

私はこれを行うことによって、同じスレッドIDを持つ2つのスレッドを作成しています:

んが、あなたがいないではありません。それ無理。

pthread_create関数は、新しいスレッド(一意のIDを持つ)を作成し、最初の引数として渡されたpthread_tに新しいスレッドのIDを格納します。その引数は、からのパラメータです。つまり、渡したpthread_tの値が使用されていないことを意味します。呼び出しが完了した後で使用するための新しい値が格納されます。

異なるIDを持つ2つのスレッドを作成していますが、2番目のスレッドが作成されたときに最初のIDを保持する変数を上書きしています。

つまり、を知っていますが、依然として2つの異なるIDがあります。

IDを格納している変数を上書きするため、最初のスレッドのIDがわからない場合は、そのスレッドに参加したり、デタッチしたり、シグナルを送信したりすることはできません。

1

私が知ったことは、出力が0、1または1のいずれかになりうることです。ここで実際に何が起こっていますか?とにかくこの場合は2つのpthread_t値を使用するのと違うのですか?

違いはありません。 2つのスレッドIDを使用しても、実行順序には影響しません。

スレッドIDが同じスレッドを作成するとどうなりますか?

あなたがスレッドIDをお持ちでないなら、あなたは(使用pthread_setschedparam/pthread_getschedparam)スケジューリングパラメータなどを調整し、それを(pthread_join()使用)または(pthread_signal()を使用して)それに信号を送ることに参加することはできませんそれ以外は大丈夫です。

関連する問題