>백엔드 개발 >C++ >C++ 표준 스레드 라이브러리를 사용하여 다중 스레드 프로그래밍을 구현하는 방법은 무엇입니까?

C++ 표준 스레드 라이브러리를 사용하여 다중 스레드 프로그래밍을 구현하는 방법은 무엇입니까?

WBOY
WBOY원래의
2024-06-04 19:36:00603검색

멀티 스레드 프로그래밍은 작업을 병렬로 실행하여 효율성을 향상시킵니다. C++ 표준 스레드 라이브러리를 사용하여 멀티 스레드를 구현하는 단계는 다음과 같습니다. std::thread를 사용하여 스레드를 생성하고 호출 가능한 개체(람다 함수 또는 함수)를 전달합니다. 포인터)를 생성자 매개변수로 사용합니다. Join() 메서드를 호출하여 스레드가 종료될 때까지 기다려 하위 스레드가 실행을 완료할 때까지 기본 스레드를 차단합니다. 실제 사례: 소수를 병렬로 계산하고, 계산 범위를 여러 스레드에 할당하고 완료될 때까지 기다린 후 결과를 병합한 후 소수 목록을 인쇄합니다.

如何使用 C++ 标准线程库实现多线程编程?

C++ 표준 스레드 라이브러리를 사용하여 멀티스레드 프로그래밍 구현

멀티스레드 프로그래밍은 여러 작업을 병렬로 실행하여 프로그램 효율성을 향상시킵니다. 이 기사에서는 C++ 표준 스레드 라이브러리를 사용하여 멀티 스레드 프로그래밍을 쉽게 구현하는 방법을 소개하고 실제 사례를 통해 설명합니다.

스레드 만들기

스레드를 생성하려면 호출 가능한 객체에 대한 참조를 생성자에 대한 인수로 받는 std::thread 클래스를 사용할 수 있습니다. 호출 가능 객체는 일반적으로 람다 함수 또는 함수 포인터입니다. 예: std::thread 类,它接收一个可调用对象的引用作为其构造函数的参数。可调用对象通常是一个 lambda 函数或一个函数指针。例如:

// 定义一个函数指针
void thread_function() {
  // ... 执行此线程应执行的任务
}

// 创建线程
std::thread t(thread_function);

等待线程终止

创建线程后,主线程可以通过调用 join() 方法等待其终止。join()

// 等待子线程完成
t.join();

스레드 종료 대기 중

스레드를 생성한 후 메인 스레드는 join() 메서드를 호출하여 종료를 기다릴 수 있습니다. join() 메서드는 하위 스레드라고 불리는 생성 스레드가 실행을 완료할 때까지 기본 스레드를 차단합니다. 예:

#include <iostream>
#include <vector>
#include <thread>

bool is_prime(int n) {
  if (n < 2) {
    return false;
  }
  for (int i = 2; i <= n / 2; ++i) {
    if (n % i == 0) {
      return false;
    }
  }
  return true;
}

std::vector<int> find_primes(int start, int end) {
  std::vector<int> primes;
  for (int i = start; i <= end; ++i) {
    if (is_prime(i)) {
      primes.push_back(i);
    }
  }
  return primes;
}

int main() {
  int start = 1;
  int end = 1000000;
  int num_threads = 4;

  // 分配计算范围
  int range_size = (end - start) / num_threads;
  std::vector<std::thread> threads;
  std::vector<std::vector<int>> primes_list;
  for (int i = 0; i < num_threads; ++i) {
    int thread_start = start + i * range_size;
    int thread_end = thread_start + range_size - 1;
    threads.emplace_back(std::thread(find_primes, thread_start, thread_end));
  }

  // 等待线程完成并合并结果
  for (auto& thread : threads) {
    std::vector<int> primes;
    thread.join();
    thread.get(primes);
    primes_list.push_back(primes);
  }

  std::vector<int> primes;
  for (auto& list : primes_list) {
    primes.insert(primes.end(), list.begin(), list.end());
  }

  // 打印素数列表
  for (int prime : primes) {
    std::cout << prime << " ";
  }
  std::cout << std::endl;

  return 0;
}

실제 사례: 소수의 병렬 계산

실제 사례를 통해 멀티스레드 프로그래밍을 시연해 보겠습니다. 여러 스레드를 사용하여 주어진 범위의 소수를 병렬로 계산하는 프로그램을 작성하겠습니다.

rrreee 이 프로그램을 실행하면 주어진 범위의 모든 소수가 출력됩니다.

🎜🎜🎜참고: 🎜이 튜토리얼에서는 C++ 표준 스레드 라이브러리를 사용하는 다중 스레드 프로그래밍의 기본 개념과 실제 적용을 보여줍니다. 고급 기능과 모범 사례를 보려면 C++ 표준 라이브러리 설명서와 온라인 리소스를 참조하는 것이 좋습니다. 🎜

위 내용은 C++ 표준 스레드 라이브러리를 사용하여 다중 스레드 프로그래밍을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.