「Linuxのアプリケーションプログラミング」 - 第13章Linuxのマルチスレッドプログラミング

マルチスレッドの概要

スレッドとは何ですか

スレッドは、プロセス内での実行の一連の流れ、複数のスレッドによって複雑にすることができるプロセス、異なるタスクを実行するために並列に各スレッドです。

スレッドとプロセスの関係

  • スレッドは、プロセスが複数のスレッドを含めることができ、プロセスに属することができますが、少なくとも一つのメインスレッドがあります
  • プロセスに割り当てられたリソースは、同じプロセス内のすべてのスレッドは、すべてのリソースのプロセスを共有します
  • リソースの基本的な単位としての基本的な単位プロセスなどのスレッドのスケジューリングとアロケーション(ここでは、オペレーティング・システム・リソースであると言います)
  • システムが再計算され、資源をリサイクルしなければならないので、あなたは、システムが作成するためのコストやスレッドの失効よりも大きいときにオーバーヘッドが生じ、または失効プロセスを作成する場合(作成または失効プロセスが作成またはスレッドの取り消しと同様に分布し、回復が含まれていますリソース)

ウィスパードBB:他の小さなFreeRTOSオペレーティングシステム、またはタスクスケジューラでマイクロカーネルプロセスの概念にいないようです。

参考「ルアンYifeng、」ブログの内容

CPU:工場、有限の発電所が想定さは、唯一のワークショップを供給することができます。言い換えれば、ワークショップでは、植物は他をシャットダウンしなければならないときに始めました。背後にある意味は、単一のCPUが1つのタスクだけを実行できることです。

プロセス:ワークショップ、プロセスは、単一のCPUがタスクを扱うことができる表し、工場のフロアのようなものです。いずれかの時点で、CPUは常に他のプロセスが実行されていない、プロセスを実行します。

ワークショップでは、多くの労働者があります。彼らは、共同作業を完了する。

スレッド:労働者、ワークショップでの糸状の労働者の比率。プロセスは複数のスレッドを含めることができます。

ワークショップスペースは、多くの労働者など、によって共有されている部屋、各労働者がの内外にできること(メモリ空間)。これは、各スレッドがこれらを使用することができ、プロセスのメモリ空間を共有している象徴する共有メモリを

ただし、異なる各部屋の大きさ、及び一部の客室にのみ、このようなトイレとして、一人の最大収容することができます。他の人が行くことができないとき内部の誰か。これは、特定の共有メモリを使用した場合、他のスレッドがメモリのこの部分を使用するために、最後までそれを待つ必要がありますスレッドを表します。

侵入から他人を防ぐ簡単な方法、プラスロックドアいます。最初の男はドアをロックし、その後、あなたがドアに並ぶなど、人々がロックされて見て、その後、ロックを開くために行きます。これは呼ばれる「相互排他ロック」が同時にメモリのブロックを読み書きする複数のスレッドを防ぐために、(相互排除、略記ミューテックス)。

一部の客室には、キッチンとして、n個の個人を収容することができます。数がnよりも大きい場合である。すなわち、余分な男は外で待機します。これは、特定のメモリ領域のようなものです、唯一のスレッドの固定数を提供することができます。

解決策は、n個のドアに鍵を入れているとき。彼らは元の位置に戻し、キーがたむろするとき、キーを取り、中に移動します。人々は頭上の鍵を見つけた後は、ドアに並んで待っていることを知っている必要があります。このような行為は呼ばれて「セマフォ」複数のスレッドが互いに競合しないことを保証するために使用され、(セマフォ)。

簡単ミューテックスセマフォ、参照するには、(N = 1時間)の特別な場合です。言い換えれば、あなたは、前者と後者を置き換えることができます。ミューテックスは、シンプルかつ効率的であるため、しかし、それは排他的で、リソースの利用可能性、またはこの設計を使用することを保証しなければなりません。

なぜ使用のマルチスレッド

  • 通信とデータ交換を容易

    スレッド間通信およびデータ交換メカニズムが容易。異なるのためのプロセス、それらは別個のデータ領域が、データ転送のみを通信手段により行うことができ、この方法は時間がかかり、不便なだけではありません。スレッドは、同じプロセス内のスレッド間であるため、そうではありません、共有データ空間に、スレッドは、直接他のスレッドのために使用することができるデータは、それが速いだけではなく、また便利。

  • CPUをより効率的に使用

    複数のスレッドを使用することができ、アプリケーションの応答改善(マルチスレッド化もラウンドロビンの説明を)。このプログラムは、特に意味のあるグラフィカルなインターフェイス、操作に時間がかかる場合は、システム全体の運転を待ちますがあり、この手順ではない、キーボード、マウス、メニューへの対応、およびマルチスレッド技術の使用は、時間がかかりますでしょう新しいスレッドの動作が、あなたはこの厄介な状況を回避することができます。

POSIXスレッドの概要

POSIXスレッド(一般にPthreadsのと呼ばれる)は、典型的には(例えば、FreeBSDの、GNU / Linuxでは、OpenBSDの、Mac OSおよび他のシステムなど)UnixライクなPOSIXシステムでは、スレッドAPIインターフェイスを作成および操作のセットを定義します。

機能別のpthreadインタフェース:

  • スレッド管理
  • ミューテックス
  • 条件変数
  • シンクロナス

pthreadsのは、マルチスレッドプログラムは、これまでpthread.hのヘッダファイルのソースを含める必要が書き、LDFLAGS + = -pthread含むようにライブラリーのニーズを指定するために使用することができます。MakefileのオプションCFLAGSは、LDFLAGS、LIBSを見つけることができます。

スレッド管理

まとめること

スレッドID

定義:スレッドがスレッドを参照するために使用されるハンドル、として見ることができます

  • pthread_self()関数
    • 役割:独自のスレッドIDを取得します。
    • 戻り値:がpthread_t
    • パラメータ:無効
  • pthread_equal機能
    • 役割は、2つのスレッドIDが等しい比較するには
    • 戻り値:等しいリターンゼロ以外の値を、そうでなければ0を返します
    • パラメータ:がpthread_t型の二つのパラメータ

作成と終了

スレッドを作成します。

スレッドを終了

例1スレッド

接続分離

スレッドの分離

スレッド接続

例2スレッド

スレッドの属性

オブジェクトのプロパティ

スレッド状態

スレッドスタック

例3スレッド

スレッドセーフ

まとめること

ミューテックス

まとめること

条件変数

まとめること

おすすめ

転載: www.cnblogs.com/dluff/p/12355325.html