Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> LinuxシステムFAQ >> pthread.hの>

関数宣言

pthread.hの>

関数宣言

  

まず、
スレッドを作成し、

ヘッダファイル

の#includeについて< > int型のpthread_createは(がpthread_tは*スレッド、CONSTのpthread_attr_t * attrのボイド*(* start_routineが)(ボイド*)、void *型のarg);

新しいスレッドを作成するには、現在のスレッドのスレッド内のpthread_create関数を呼び出します実行が新たに作成されたスレッドのstart_routineはエントリ機能は、start_routineは機能は、パラメータがパラメータargのpthread_createによってそれに渡される受け、ダウンのpthread_createで継続、パラメータの型はvoid *、呼び出すことによって解釈どのような種類のポインタであります自分の定義によって、start_routineは戻り値の型は、発信者自身が、start_routineが復帰によって定義されたものと同じ意味のポインタは、このスレッドから撤退し、無効である、他のスレッドがpthread_joinをstart_routineが取得戻り値を呼び出すことができます。

パラメータの説明

最初のパラメータはスレッド識別子へのポインタです。

2番目のパラメータは、スレッドプロパティを設定してさまざまなスレッドプロパティを指定するために使用されます。

第三のパラメータは、関数を実行するスレッドの開始アドレスであり、必要なパラメータが複数の機能start_rtnに送信場合、機能は、一つだけのユニバーサルポインタパラメータのArgを有し、必要な設定にこれらのパラメータを、次に、この構造体のアドレスをパラメータとしてargに渡します。

最後のパラメータは関数への引数です。

戻り値

スレッドの生成に成功した場合は、スレッドの作成が失敗した場合に、それは0を返し、エラー番号が返され、*コンテンツのスレッドは未定義です。 stdio.hの>

の#include< pthread.hの>

ボイドprintThread(
は、

最初

の#include<単純な手順
スレッドCONSTのchar *秒)

{

PID pid_t;

がpthread_t TID;

PID = GETPID();

TID = pthread_self();

のprintf("%S PID%U TID%U(0X%のX)\\ N" S、(unsigned int型)のPID、(unsigned int型)TID、(unsigned int型)TID );

}

ボイド*ラン(ボイド*引数)

{

printThread("新しいスレッド:");

戻りNULL;

}

INTメイン(ボイド)

{

がpthread_tのPT;

INT ERR =のpthread_create (&#038; PT、NULL、実行、NULL);

もし(!ERR = 0)

のprintf("スレッドを作成することはできません:%sの\\ nは"、はstrerror(ERR ));

printThread("メインスレッド:");

pthread_joinを(PT、NULL);

0を返します。デフォルトのpthreadライブラリは、Linuxシステムではなく、POSIXスレッドライブラリので
は、

}


に注意してください。 Linuxでライブラリとして使用するため、ライブラリを明示的にリンクするには-lpthread(または-pthread)を追加します。

$ G ++ main.cppに-lpthread -oメイン

$。/メイン

2、pthread_joinを機能

関数宣言

すなわち一意スレッドを識別するスレッドIDは、スレッド識別子:

パラメータ

糸; INT pthread_joinを(がpthread_tスレッド、空隙** RETVAL)。

retval:キューに入れられているスレッドの戻り値を格納するユーザー定義のポインタ。

説明

pthread_join関数は、threadで指定されたスレッドが終了するのを待つために現在のスレッドの実行をブロックします。関数が戻ると、待機中のスレッドのリソースが回収されます。プロセスが終了した場合、関数はすぐに戻ります。また、threadで指定されたスレッドは結合可能である必要があり、新しく作成されたスレッドはデフォルトで結合可能です。

第三に、二つの状態のスレッド:合流可能(デフォルト)とデタッチ

合流可能スレッドが再利用される前に、他のスレッド、他のスレッドによって回収することができ、それはメモリリソースを占有していません解放され、切り離されたスレッドは他のスレッドによって回収されることはできず、そのスレッドが占有していたメモリリソースはシステムによって自動的に解放されます。関数リターンをpthread_joinをする場合にのみ

デフォルトでは、スレッドが合流可能で、スレッドの作成は、切り離されたスレッドが他のスレッドを待っていないときに、スレッドが終了すると、システムリソースを解放するために、自身が占領し、終了と見なされますシステムリソースをただちに解放します。

関数pthread_attr_setdetachstate、関数宣言スレッド状態はpthread_attr_setdetachstate(のpthread_attr_t * ATTR、INT detachstate)が設定され、2番目のパラメータはオプションPTHREAD_CREATE_DETACHED(別のスレッド)とPTHREAD _CREATE_JOINABLE(非分離スレッド)です。あなたがスレッドに別のスレッドを設定し、このスレッドが実行され、非常に高速な場合はpthread_createの機能が停止します前に

、返す可能性があり、その終了後に他のスレッドにスレッド番号とシステムリソースを転送することが可能ですpthread_createを呼び出すスレッドが間違ったスレッド番号を取得するように使用します。この同期を回避するためには特定の手段、pthread_cond_timewaitスレッドで関数を呼び出すことであるが作成された最も簡単な方法のいずれかを取ることができ、このスレッドは、関数のpthread_createの復帰のための十分な時間を残して、しばらく待つようにしましょう。待機時間の設定は、マルチスレッドプログラミングでは一般的な方法です。しかし、waitなどのプロセスを使用しないように注意してください。これは、プロセス全体をスリープ状態にし、スレッド同期の問題を解決できないためです。プロセス内の1つのスレッドがpthread_detachの(目)を行っている場合

、番目のスレッドが実行の最後に、独自のリソースによって占有されていたメモリを解放することができます番目のスレッドデタッチ状態になりますが、(pthread_joinを行うことができませんpthread_joinを番目の要求(のための)同期、pthread_detachの後の()の実行)エラーを返します。

IVマルチスレッドの属性設定でlinux
のデフォルトはのattrの値

のpthread_attr_tのattr

を属性;

初期化プロパティ

のpthread_attr_t ATTR;

pthread_attr_init(&#038; ATTR);
は、

pthread_attr_init正常終了は0が返され、それ以外の値はエラーを示し、そして対応する値を返します。プロパティ

破壊

は、pthread_attr_destroy使用(&#038を、ATTR)の初期化時に割り当てられたストレージスペースを削除し、プロパティオブジェクトは無効となります、関数が正常終了時に0を返し、それ以外の戻り値があることを示しエラーと対応する値を返します。

Copyright © Windowsの知識 All Rights Reserved