La programmation simultanée C++ implémente l'exécution simultanée multitâche via des mécanismes tels que des threads, des mutex, des variables de condition et des opérations atomiques. Dans des cas pratiques, les programmes de traitement d'images multithread divisent les images en blocs et traitent ces blocs en parallèle via un pool de threads, réduisant ainsi le temps de traitement.
Explorer la théorie et la pratique de la programmation simultanée en C++
Introduction
La programmation simultanée implique l'exécution de plusieurs tâches en même temps, et elle est devenue un élément indispensable du développement logiciel moderne. Le langage C++ offre une multitude de fonctionnalités de concurrence, et cet article approfondira les fondements théoriques et les applications pratiques de ces fonctionnalités.
Base théorique
Cas pratique : traitement d'image multithread
Pour démontrer l'application pratique de la programmation simultanée, nous allons implémenter un programme de traitement d'image multithread qui divise l'image en plusieurs blocs et effectue le traitement d'image en parallèle sur chaque bloc. Tâche .
Implémentation du code
#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; }
Résultats d'exécution
Le programme traitera les blocs de l'image en parallèle, raccourcissant ainsi le temps de traitement global. La sortie affichera les détails des blocs traités par chaque thread.
Résumé
Cet article explore les fondements théoriques et l'application pratique de la programmation concurrente C++. En introduisant des concepts tels que les mutex, les variables de condition et les opérations atomiques, nous montrons comment implémenter des programmes multithread efficaces et sécurisés. Des cas pratiques démontrent l'application pratique de la programmation concurrente dans le domaine du traitement d'images.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!