C++スレッド分離状態に関するプログラミング(上)

1858 ワード

ほんの少し
分離ステータスはスレッドの重要なプロパティです.POSIXスレッドの分離状態は,1つのスレッドがどのように自分を終了するかを決定する.デフォルトの分離ステータスは接続可能です.つまり、スレッドを作成するときにデフォルトのプロパティを使用すると、分離ステータスのプロパティは接続可能になります.したがって、デフォルトのプロパティで作成されたスレッドは接続可能です.
POSIXの下のスレッドは分離されているか、接続可能であるかのいずれかです.前者はマクロPTHREAD_CREATE_DETACHEDによると、後者はマクロPTHREAD_CREATE_JOINABLEB表示.デフォルトで作成されたスレッドは接続可能であり、接続可能なスレッドは他のスレッドによってリソースを回収し、殺すことができ、リソースをアクティブに解放することはなく、他のスレッドがリソースを回収するのを待つ必要があります.メインスレッドでpthread_を使用しますjoin関数、この関数はブロック関数であり、それが戻ると、待機しているスレッドリソースも解放されます.接続可能なスレッドの場合、スレッド関数が自分で終了を返すか、pthread_を呼び出すことを改めて強調します.exit終了時にスレッドが占有するスタックとスレッド記述子(合計8千バイト以上)は解放されず、pthread_を呼び出す必要があります.joinが戻ってくると、これらのリソースは解放されます.
二分離可能なスレッドの作成
1コード
#include 
#include 
#include  //sleep
using namespace std;

void *thfunc(void *arg)
{
    cout<

2運転
[root@localhost test]# g++ -o test test.cpp -lpthread
[root@localhost test]# ./test
main thread will exit

sub thread is running

3説明
まずスレッド属性構造体を初期化し、PTHREAD_に分離状態を設定します.CREATE_DETACHEDは,この属性構造体をパラメータとしてスレッド作成関数に入力する.このようにして作成されたスレッド関数は、分離可能なスレッドです.スレッドが終了すると、使用するリソースはすぐにシステムによって回収されることを意味します.プログラムの最後に、mainスレッドは1秒停止し、サブスレッドが実行される機会を与える.mainスレッドが早く終了すると、プロセス全体が早く終了し、サブスレッドが実行されないためです.
3分離可能なスレッドを作成しmainスレッドを先に終了
1コード
#include 
#include 

using namespace std;

void *thfunc(void *arg)
{
    cout<

2運転
[root@localhost test]# g++ -o test test.cpp -lpthread
[root@localhost test]# ./test
main thread will exit

sub thread is running

3説明
mainスレッドで関数pthread_が呼び出されましたexitはmainスレッドを終了しますが、プロセスは今終了するのではなく、サブスレッドが終了してから終了します.分離スレッドなので、終了すると、占有されたリソースがすぐにシステムに回収されます.接続可能なスレッドの場合は、作成したスレッドでpthread_を呼び出す必要があります.joinは、接続可能なスレッドが終了し、スレッドが占めるリソースが解放されるのを待つ.