C 11의 스레드 풀링
소개
스레드 풀링은 동적으로 작업을 할당할 수 있는 스레드 집합입니다. 성능 및 리소스 효율성 향상을 포함하여 각 작업에서 스레드를 생성하고 삭제하는 것보다 여러 가지 이점을 제공합니다.
스레드 풀링 이해
C 11에서 스레드 풀은 일반적으로 스레드, 뮤텍스 및 조건 변수의 조합을 사용하여 구현됩니다. 스레드는 백그라운드에서 생성 및 시작되며 작업은 대기열에 추가됩니다. 작업자는 대기열을 지속적으로 모니터링하여 새로운 작업을 사용할 수 있을 때까지 기다립니다. 작업이 가능해지면 작업자는 이를 검색하고 실행합니다.
스레드 풀 생성
스레드 풀을 생성하려면 ThreadPool 클래스를 정의할 수 있습니다.
class ThreadPool { public: void Start(); void QueueJob(const std::function<void()>& job); void Stop(); bool busy(); private: void ThreadLoop(); bool should_terminate = false; std::mutex queue_mutex; std::condition_variable mutex_condition; std::vector<std::thread> threads; std::queue<std::function<void()>> jobs; };
스레드 관리 Pool
작업자 스레드 루프
각 작업자 스레드는 무한 루프를 실행하여 작업을 기다리고 실행합니다.
void ThreadPool::ThreadLoop() { while (true) { std::function<void()> job; { std::unique_lock<std::mutex> lock(queue_mutex); mutex_condition.wait(lock, [this] { return !jobs.empty() || should_terminate; }); if (should_terminate) { return; } job = jobs.front(); jobs.pop(); } job(); } }
스레드 풀 사용
스레드 풀을 사용하려면, 간단히 인스턴스를 생성하고 QueueJob을 호출하여 작업을 추가하세요.
ThreadPool thread_pool; thread_pool.Start(); thread_pool.QueueJob([] { /* ... */ });
스레드 풀링의 장점
위 내용은 C 11에서 스레드 풀링은 어떻게 작동합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!