差出人:http ://linux.die.net/man/3/pthread_join
pthread_join()を呼び出すスレッドがキャンセルされた場合、ターゲットスレッドは結合可能なままになります(つまり、デタッチされません)。
これは、メインスレッドの呼び出しをキャンセルしても、ターゲットスレッドが中止されないことを意味しますpthread_join
か?
差出人:http ://linux.die.net/man/3/pthread_join
pthread_join()を呼び出すスレッドがキャンセルされた場合、ターゲットスレッドは結合可能なままになります(つまり、デタッチされません)。
これは、メインスレッドの呼び出しをキャンセルしても、ターゲットスレッドが中止されないことを意味しますpthread_join
か?
pthread_join()
そもそもターゲットスレッドを「中止」しないので、質問を完全に理解しているかどうかはわかりません。
基本的に、スレッド(メインスレッドまたはその他)が呼び出すpthread_join()
と、ターゲットスレッドが終了するまでブロックするように求められます。通常の場合、ターゲットスレッドが終了すると、呼び出されたスレッドのpthread_join()
ブロックが解除され、ターゲットスレッドに関連付けられていたリソースをシステムから解放できます。
ただし、スレッドが呼び出してpthread_join()
(ターゲットスレッドが終了するのを待ってブロックされ)、ブロックされたスレッドがキャンセルされた場合、呼び出しのターゲットには基本的に何も起こりませんpthread_join()
(続行します)。ドキュメントが明確にしているのは、そのスレッドが「参加可能」のままであるということです。つまり、次のことを意味します。
pthread_join()
、それが終了するのを待つために呼び出すことができますpthread_detach()
スレッドを呼び出すpthread_detach()
と、スレッドは「結合不能」になります。スレッドは実行を継続し、終了時にリソースが解放されます(detach呼び出しは、スレッドの終了後にこれらのリソースを使用しないことをシステムに示します)が、スレッドはスレッドに参加できなくなります。文学的意味は、3つのスレッド、、、およびA
結合がある場合、キャンセルされた場合に結合できるということです。B
C
B
A
C
A
B
結合スレッドをキャンセルしても、必ずしも結合されているスレッドが中止されるわけではありません。スレッドがキャンセルされると、終了前にクリーンアップを実行できます。これには、他のスレッドのキャンセルも含まれます。