C++ 同時プログラミングは、スレッド、ミューテックス、条件変数、アトミック操作などのメカニズムを通じてマルチタスクの同時実行を実装します。実際の場合、マルチスレッド画像処理プログラムは画像をブロックに分割し、スレッド プールを通じてこれらのブロックを並列処理することで、処理時間を短縮します。
C++ での並行プログラミングの理論と実践を探る
はじめに
並行プログラミングには複数のタスクを同時に実行することが含まれており、現代のソフトウェア開発には不可欠な部分となっています。 C++ 言語は豊富な同時実行機能を提供します。この記事では、これらの機能の理論的基礎と実際のアプリケーションについて詳しく説明します。
理論的根拠
実践事例: マルチスレッド画像処理
同時プログラミングの実際の応用を実証するために、画像を複数のブロックに分割し、各ブロックで並列に画像処理を実行するマルチスレッド画像処理プログラムを実装します。 。
コードの実装
#include <iostream> #include <vector> #include <thread> #include <mutex> #include <condition_variable> using namespace std; // 图像块结构体 struct ImageBlock { int start_row; // 块的起始行 int start_col; // 块的起始列 int width; // 块的宽度 int height; // 块的高度 }; // 共享变量保护 mutex m; condition_variable cv; // 是否已处理完所有块 bool done = false; // 图片处理函数 void processImageBlock(ImageBlock block) { // ... 实际的图像处理操作 ... } // 线程处理函数 void threadFunc(vector<ImageBlock>& blocks) { while (!done) { // 获取一个未处理的块 unique_lock<mutex> lk(m); ImageBlock block; for (auto& b : blocks) { if (!b.processed) { block = b; b.processed = true; break; } } // 如果没有未处理的块,则等待 if (!block.processed) { cv.wait(lk); } // 对块进行处理 processImageBlock(block); } } int main() { // 划分图像为块 vector<ImageBlock> blocks; // ... 省略分割图像的代码 ... // 创建线程池 vector<thread> threads; for (int i = 0; i < 4; i++) { threads.emplace_back(threadFunc, ref(blocks)); } // 等待所有线程完成 { unique_lock<mutex> lk(m); done = true; cv.notify_all(); } for (auto& t : threads) { t.join(); } return 0; }
実行結果
プログラムは画像内のブロックを並列処理するため、全体の処理時間が短縮されます。出力には、各スレッドによって処理されたブロックの詳細が表示されます。
概要
この記事では、C++ 同時プログラミングの理論的基礎と実際の応用について説明します。ミューテックス、条件変数、アトミック操作などの概念を導入することで、スレッドセーフで効率的なマルチスレッド プログラムを実装する方法を示します。実際の事例では、画像処理分野における同時プログラミングの実際の応用を示しています。
以上がC++ 同時プログラミングの理論的および実践的な探求の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。