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 중국어 웹사이트의 기타 관련 기사를 참조하세요!