작업 예약 및 스레드 풀 관리는 C++ 동시 프로그래밍의 효율성과 확장성을 향상시키는 열쇠입니다. 작업 예약: std::thread를 사용하여 새 스레드를 만듭니다. 스레드를 조인하려면 Join() 메소드를 사용하십시오. 스레드 풀 관리: ThreadPool 개체를 생성하고 스레드 수를 지정합니다. add_task() 메서드를 사용하여 작업을 추가합니다. 스레드 풀을 종료하려면 Join() 또는 stop() 메서드를 호출하십시오.
C++ 동시 프로그래밍: 작업 예약 및 스레드 풀 관리
소개
동시 프로그래밍에서 작업 예약 및 스레드 풀 관리는 애플리케이션의 효율성과 확장성을 향상시키는 데 중요합니다. 이 문서에서는 C++의 작업 예약 개념을 안내하고 C++11 표준의 std::thread
및 std::mutex
를 사용하여 관리하는 방법을 보여줍니다. 스레드 풀. std::thread
和 std::mutex
来管理线程池。
任务调度
任务调度涉及分配和执行异步任务。在 C++ 中,可以使用 std::thread
来创建新线程:
std::thread t([]() { // 执行异步任务 });
要加入线程,请使用 join()
方法:
t.join();
线程池管理
线程池是一个预先创建并管理的线程集合,可用于处理任务。使用线程池可以避免反复创建和销毁线程的开销。
以下是如何在 C++ 中创建和管理线程池:
class ThreadPool { public: ThreadPool(int num_threads) { for (int i = 0; i < num_threads; i++) { threads_.emplace_back(std::thread([this]() { this->thread_loop(); })); } } void thread_loop() { while (true) { std::function<void()> task; { std::lock_guard<std::mutex> lock(mtx_); if (tasks_.empty()) { continue; } task = tasks_.front(); tasks_.pop(); } task(); } } void add_task(std::function<void()> task) { std::lock_guard<std::mutex> lock(mtx_); tasks_.push(task); } void stop() { std::unique_lock<std::mutex> lock(mtx_); stop_ = true; } ~ThreadPool() { stop(); for (auto& t : threads_) { t.join(); } } private: std::vector<std::thread> threads_; std::queue<std::function<void()>> tasks_; std::mutex mtx_; bool stop_ = false; };
要使用线程池,可以执行以下步骤:
add_task()
方法将任务添加到线程池。join()
或 stop()
方法来关闭线程池并等待所有任务完成。实战案例
以下是一个使用线程池在多核系统上执行并发任务的示例:
#include <iostream> #include <vector> #include "thread_pool.h" int main() { ThreadPool pool(4); std::vector<std::future<int>> futures; for (int i = 0; i < 10000; i++) { futures.push_back(pool.add_task([i]() { return i * i; })); } for (auto& f : futures) { std::cout << f.get() << std::endl; } return 0; }
结论
通过使用 std::thread
std::thread
를 사용하여 새 스레드를 만들 수 있습니다. 🎜rrreee🎜스레드를 조인하려면 join()
메서드를 사용하세요. 🎜rrreee🎜🎜Thread 풀 관리 🎜🎜🎜스레드 풀은 작업을 처리하는 데 사용할 수 있는 미리 생성되고 관리되는 스레드 모음입니다. 스레드 풀을 사용하면 스레드를 반복적으로 생성하고 삭제하는 오버헤드가 방지됩니다. 🎜🎜C++에서 스레드 풀을 생성하고 관리하는 방법은 다음과 같습니다. 🎜rrreee🎜스레드 풀을 사용하려면 다음 단계를 수행할 수 있습니다. 🎜add_task()
메서드를 사용하세요. join()
또는 stop()
메서드를 호출하여 스레드 풀을 닫고 모든 작업이 완료될 때까지 기다립니다. std를 사용하여 ::thread code> 및 스레드 풀은 C++에서 동시 작업을 효과적으로 관리할 수 있습니다. 멀티 코어 시스템의 과학적 컴퓨팅이든, 대량의 요청을 처리해야 하는 웹 서비스이든, 스레드 예약 및 스레드 풀 관리는 코드 효율성과 확장성을 향상시키는 데 핵심입니다. 🎜
위 내용은 C++ 동시 프로그래밍: 작업 스케줄링 및 스레드 풀 관리를 수행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!