20 同時プログラミング

同時プログラミング

  • 同時実行性: プログラムの複数の部分が同時に実行されることを指します。
  • 並列処理: プログラムの複数の部分が複数のプロセッサ上で同時に実行されます。

同時プログラミングのスレッド

  • スレッドは、同じプロセス内の他のスレッドと同じアドレス空間やその他のリソースを共有する軽量プロセスですが、各スレッドには独自の実行ラインがあります。
  • スレッドは、プロセスよりも軽量な同時プログラミング モデルを提供します。

スレッドの作成

  • POSIX スレッド ライブラリは、pthread_create という名前のスレッドを作成するための API を提供します。
  • スレッドが作成された後は、プログラム内で複数のスレッドが同時に実行されることになるため、プログラムの正確性は、これらのスレッドがどのように相互作用するかによって決まります。

スレッドの同期

  • スレッド間の同期とは、スレッド間でのアクティビティの調整を指し、スレッドが適切なタイミングで適切な操作を実行できるようにします。
  • 一般的な同期メカニズムには、ミューテックス、条件変数、セマフォが含まれます。

ミューテックス

  • ミューテックスは、共有リソースへのアクセスを制御し、一度に 1 つのスレッドだけが共有リソースにアクセスできるようにするために使用される同期メカニズムです。
  • POSIX スレッド ライブラリは、pthread_mutex と呼ばれるミューテックスを提供します。

条件変数

  • 条件変数は、ある条件が true になるまでスレッドを一時停止し、条件が満たされたときに再開できるようにする同期メカニズムです。
  • POSIX スレッド ライブラリは、pthread_cond という条件変数を提供します。

信号変数

  • セマフォは、共有リソースへのアクセスを制御するために使用される同期メカニズムであり、カウンター機能を提供します。
  • POSIX スレッド ライブラリは、sem_t と呼ばれるセマフォを提供します。

デッドロック

  • デッドロックとは、2 つ以上のスレッドが、お互いに保持しているリソースを求めて互いに待機し続ける状況です。
  • デッドロックは同時プログラミングでよくある問題であるため、スレッド間の対話は慎重に設計する必要があります。

スレッド競合状態

  • 競合状態とは、プログラムの正確さがスレッド間の実行順序とスレッド間の共有リソースへのアクセスに依存することを意味します。
  • 競合状態は未定義の動作やプログラム エラーを引き起こす可能性があるため、スレッド間の対話は慎重に設計する必要があります。

スレッドセーフ設計

  • スレッド セーフとは、複数のスレッドが同時に実行されているときにプログラムが正しく実行できることを意味します。
  • スレッドセーフ設計には、同期メカニズムを使用して共有リソースを保護し、競合状態を回避し、スレッドの相互作用方法を慎重に設計することが含まれます。

おすすめ

転載: blog.csdn.net/m0_56898461/article/details/130202707