マルチスレッドプログラミングでは、様々な理由のために、我々は、このような動作の一部にセマフォ又はロックが制御されているような種々の機構が使用され、一般に2つの方法で使用LinuxのCプログラミング、そこに教えてくれる:セマフォモードとロックモード
ロック:保護するために排他に使用リソース一瞬だけで複数のスレッドによってアクセスされることができる複数のスレッド間を、処理のために
セマフォは:の確立された順序に応じて固定するための複数の実行スレッド間の同期のために使用される手順、マルチスレッド・プロセスを使用してもよいプロセスの前記複数で使用することができます
WXY:ロックがロックされた瞬間から、そうでない場合は、リソースのリソースを、(?複数のスレッドがこれらの変数にアクセスしたり、グローバル変数を呼び出し、またはクラスのメンバ変数のように...することができます)を保護するために、あなたはまだすることができ続けます
他は私の信号(ポスト)を与えたいと思っていない限り、あなたが言うことを継続することができ、私はちょうどに行くし続けた瞬間ではなく、アクティブセマフォからの同期のためのセマフォ
:ミューテックス(ロック)
(試験後)1、使用例
// 0ヘッダが組み込ま の#include <ミューテックス> // 1.ロック定義ミューテックスmutex_meと、 ++++++ +++++++++ +++++++++スレッド、スレッド1が2+ ++++++++ // 2. // 2だけで mutex_me。ロック()mutex_me。ロック()/ * STEP1 * / / * STEP1 * / / * リソース* / / * STEP2 * / // 3.ロック解除 mutex_me.unlock() / * リソース* / / *
STEP2 * / // 3.解锁
mutex_me.unlock()
2、セマフォ
1.使用例(未テスト)
// 0ヘッダ援用 する#include <semaphore.h> // 1.定義/セマフォ作成sem_t semaphoretcpItemと、 sem_init(&semaphoretcpItem、0、1 ); ++++++スレッド1 +++++++スレッド2 ++ +++++++++ +++++++++ @ 2ウェイトセマフォ // 3.リリースセマフォ sem_waitの(&semaphoretcpItem);)sem_post(&semaphoretcpItem); / * STEP1 * / / * STEP2 * / / * リソース* / / * STEP3 * /
図2に示すように、相関関数の解析
sem_init():セマフォを初期化するために使用。
そのプロトタイプます。extern int型sem_init __P((sem_t * __ SEM、int型__pshared、unsigned int型__value));
SEMセマフォは、構造体へのポインタです。
現在のプロセスのすべてのスレッドで共有プロセスのみ、または間で共有ゼロセマフォではないのpshared。
値は、セマフォの初期値を与えています。
sem_post(* SEM sem_t):セマフォの値を増加するために使用。
スレッドがセマフォでブロックされている場合は、この関数を呼び出す1つのスレッドも、スレッドのスケジューリングポリシーの決定で選択機構によってブロックされていないが発生します。
sem_wait(sem_t * SEM):セマフォ値が0より大きいSEM、になるまで現在のスレッドをブロックするために使用される一般的なリソースの使用により減少し、SEMを遮断値マイナス1、ショーの後にリリース。
sem_trywaitは(* SEM sem_t):sem_wait()ノンブロッキング版の機能、直接SEMセマフォ値のマイナス1を。
sem_destroy(* SEMをsem_t):セマフォSEMを解放します。