Heim  >  Artikel  >  Backend-Entwicklung  >  Wie implementiert man Multithread-Programmierung mithilfe der C++-Standard-Thread-Bibliothek?

Wie implementiert man Multithread-Programmierung mithilfe der C++-Standard-Thread-Bibliothek?

WBOY
WBOYOriginal
2024-06-04 19:36:00529Durchsuche

Multithread-Programmierung verbessert die Effizienz durch die parallele Ausführung von Aufgaben. Die Schritte zum Implementieren von Multithreading mithilfe der C++-Standard-Thread-Bibliothek sind wie folgt: Verwenden Sie std::thread, um einen Thread zu erstellen und ein aufrufbares Objekt (Lambda-Funktion oder -Funktion) zu übergeben Zeiger) als Konstruktorparameter. Warten Sie, bis der Thread beendet ist, indem Sie die Methode „join()“ aufrufen und den Hauptthread blockieren, bis der untergeordnete Thread die Ausführung abschließt. Praktischer Fall: Berechnen Sie Primzahlen parallel, weisen Sie den Berechnungsbereich mehreren Threads zu, warten Sie auf dessen Abschluss und drucken Sie die Primzahlenliste nach dem Zusammenführen der Ergebnisse aus.

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

Verwenden Sie die C++-Standard-Thread-Bibliothek, um Multithread-Programmierung zu implementieren.

Multithread-Programmierung verbessert die Programmeffizienz durch die parallele Ausführung mehrerer Aufgaben. In diesem Artikel wird die Verwendung der C++-Standard-Thread-Bibliothek zur einfachen Implementierung von Multithread-Programmierung vorgestellt und anhand praktischer Fälle veranschaulicht.

Threads erstellen

Um einen Thread zu erstellen, können Sie die Klasse std::thread verwenden, die eine Referenz auf ein aufrufbares Objekt als Parameter für ihren Konstruktor erhält. Ein aufrufbares Objekt ist normalerweise eine Lambda-Funktion oder ein Funktionszeiger. Zum Beispiel: std::thread 类,它接收一个可调用对象的引用作为其构造函数的参数。可调用对象通常是一个 lambda 函数或一个函数指针。例如:

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

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

等待线程终止

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

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

Warten auf Thread-Beendigung

Nach dem Erstellen eines Threads kann der Haupt-Thread auf dessen Beendigung warten, indem er die Methode join() aufruft. Die Methode join() blockiert den Hauptthread, bis der Erstellungsthread, der als untergeordneter Thread bezeichnet wird, seine Ausführung abschließt. Zum Beispiel:

#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;
}

Praktischer Fall: Parallele Berechnung von Primzahlen

Lassen Sie uns die Multithread-Programmierung anhand eines praktischen Falls demonstrieren. Wir werden ein Programm schreiben, das mehrere Threads verwendet, um Primzahlen in einem bestimmten Bereich parallel zu berechnen.

rrreeeBeim Ausführen dieses Programms werden alle Primzahlen im angegebenen Bereich ausgegeben.

🎜🎜🎜Hinweis: 🎜Dieses Tutorial demonstriert die grundlegenden Konzepte und praktischen Anwendungen der Multithread-Programmierung mithilfe der C++-Standard-Threading-Bibliothek. Für erweiterte Funktionen und Best Practices wird empfohlen, die Dokumentation und Online-Ressourcen der C++-Standardbibliothek zu konsultieren. 🎜

Das obige ist der detaillierte Inhalt vonWie implementiert man Multithread-Programmierung mithilfe der C++-Standard-Thread-Bibliothek?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn