C++ 同時プログラミング: 並列スレッドでのリソース割り当てを管理するにはどうすればよいですか?

王林
リリース: 2024-05-06 16:15:01
オリジナル
238 人が閲覧しました

マルチスレッド プログラムでは、C++ はミューテックス ロックとアトミック タイプを使用して、スレッドが共有リソースに正しくアクセスできるようにします。ミューテックス ロック: std::mutex クラスはミューテックス ロックを作成し、一度に 1 つのスレッドのみが共有リソースにアクセスできるようにして、データ競合を防ぎます。アトミック タイプ: std::atomic は、複数のスレッドが同じ変数を同時に変更することを防止するアトミック操作を提供し、スレッドの安全性を確保します。

C++ 同時プログラミング: 並列スレッドでのリソース割り当てを管理するにはどうすればよいですか?

C++ 同時プログラミング: 並列スレッドでのリソース割り当ての管理

マルチスレッド プログラミングでは、データ競合を防止し、プログラムの正確性を確保するために、リソース割り当ての管理が重要です。 C++ は、ミューテックス ロックやアトミック タイプなど、リソース割り当てを実装するためのいくつかの同期メカニズムを提供します。

1. ミューテックス ロック

ミューテックス ロックは、一度に 1 つのスレッドのみが共有リソースにアクセスできるようにする同期メカニズムです。 C++ では、std::mutex クラスを使用してミューテックス ロックを作成できます。 std::mutex类来创建互斥锁。

代码范例:

std::mutex mtx;

void thread_function() {
  std::lock_guard guard(mtx);
  // 对共享资源进行操作
}
ログイン後にコピー

在这个示例中,std::lock_guard是一个RAII(资源获取即初始化)包装器,它在函数作用域的生存期内锁定互斥锁。

2. 原子类型

原子类型是线程安全的内置类型,可以执行原子操作。它们防止多个线程同时修改同一个变量,从而避免数据竞争。C++标准库提供了一些原子类型,如std::atomic

コード例:

std::atomic counter;

void thread_function() {
  counter++; // 执行原子增量操作
}
ログイン後にコピー

この例では、 std::lock_guard は、関数スコープ Lock の存続期間中ミューテックスをロックする RAII (リソース取得、つまり初期化) ラッパーです。

2. アトミックタイプ

アトミックタイプは、アトミックな操作を実行できるスレッドセーフな組み込みタイプです。これらにより、複数のスレッドが同じ変数を同時に変更することがなくなり、データ競合が回避されます。 C++ 標準ライブラリは、std::atomic などのいくつかのアトミック タイプを提供します。

コード例:

std::mutex mtx;
std::queue queue;

void producer_thread() {
  while (true) {
    std::lock_guard guard(mtx);
    queue.push(rand());
  }
}

void consumer_thread() {
  while (true) {
    std::lock_guard guard(mtx);
    if (!queue.empty()) {
      std::cout << queue.front() << std::endl;
      queue.pop();
    }
  }
}

int main() {
  std::thread t1(producer_thread);
  std::thread t2(consumer_thread);
  t1.join();
  t2.join();
  return 0;
}
ログイン後にコピー
🎜実践的なケース🎜🎜🎜プロデューサースレッドがデータを生成し、コンシューマースレッドがデータを消費するプロデューサー-コンシューマー問題を考えてみましょう。リソースは共有キューであり、データ競合を防ぐためにミューテックスによって保護する必要があります。 🎜🎜🎜コード例: 🎜🎜rrreee🎜 この例では、ミューテックスを使用して共有キューを保護し、プロデューサーとコンシューマーのスレッドが同時にキューにアクセスできないようにします。 🎜

以上がC++ 同時プログラミング: 並列スレッドでのリソース割り当てを管理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!