2

差出人:http ://linux.die.net/man/3/pthread_join

pthread_join()を呼び出すスレッドがキャンセルされた場合、ターゲットスレッドは結合可能なままになります(つまり、デタッチされません)。

これは、メインスレッドの呼び出しをキャンセルしても、ターゲットスレッドが中止されないことを意味しますpthread_joinか?

4

2 に答える 2

2

pthread_join()そもそもターゲットスレッドを「中止」しないので、質問を完全に理解しているかどうかはわかりません。

基本的に、スレッド(メインスレッドまたはその他)が呼び出すpthread_join()と、ターゲットスレッドが終了するまでブロックするように求められます。通常の場合、ターゲットスレッドが終了すると、呼び出されたスレッドのpthread_join()ブロックが解除され、ターゲットスレッドに関連付けられていたリソースをシステムから解放できます。

ただし、スレッドが呼び出してpthread_join()(ターゲットスレッドが終了するのを待ってブロックされ)、ブロックされたスレッドがキャンセルされた場合、呼び出しのターゲットには基本的に何も起こりませんpthread_join()(続行します)。ドキュメントが明確にしているのは、そのスレッドが「参加可能」のままであるということです。つまり、次のことを意味します。

  • 別のスレッドはpthread_join()、それが終了するのを待つために呼び出すことができます
  • スレッドが完了して参加したときにシステムが解放できるリソースは、別のスレッドがターゲットスレッドに参加するか、ターゲットスレッドに対して呼び出されない限り、解放されません。pthread_detach()スレッドを呼び出すpthread_detach()と、スレッドは「結合不能」になります。スレッドは実行を継続し、終了時にリソースが解放されます(detach呼び出しは、スレッドの終了後にこれらのリソースを使用しないことをシステムに示します)が、スレッドはスレッドに参加できなくなります。
于 2012-05-23T07:17:15.957 に答える
0

文学的意味は、3つのスレッド、、、およびA結合がある場合、キャンセルされた場合に結合できるということです。BCBACAB

結合スレッドをキャンセルしても、必ずしも結合されているスレッドが中止されるわけではありません。スレッドがキャンセルされると、終了前にクリーンアップを実行できます。これには、他のスレッドのキャンセルも含まれます。

于 2012-05-23T07:16:02.983 に答える