Heim  >  Artikel  >  Backend-Entwicklung  >  Wie erstelle und verwalte ich Threads in C++? Welche Thread-Synchronisationsmechanismen gibt es?

Wie erstelle und verwalte ich Threads in C++? Welche Thread-Synchronisationsmechanismen gibt es?

王林
王林Original
2024-05-07 21:03:01555Durchsuche

Threads in C++ Threads sind leichte Ausführungseinheiten, die gleichzeitige Programmierung ermöglichen. Verwenden Sie die Klasse std::thread, um Threads zu erstellen und die Konsistenz gemeinsam genutzter Daten durch Synchronisierungsmechanismen wie Mutexe, Bedingungsvariablen und Spinlocks aufrechtzuerhalten. Der praktische Fall zeigt den Prozess der gleichzeitigen Berechnung der Summe mithilfe von Threads.

C++ 中如何创建和管理线程?有哪些线程同步机制?

Thread-Erstellung und -Verwaltung in C++

Threads sind leichte Ausführungseinheiten, die den gleichen Adressraum mit Prozessen teilen und so eine gleichzeitige Programmierung ermöglichen.

Erstellen Sie einen Thread

Verwenden Sie in C++ die std::thread-Klasse, um einen Thread zu erstellen:

#include <thread>

void thread_function() {
  // 执行线程任务
}

int main() {
  std::thread thread(thread_function);
  thread.join();  // 阻塞主线程,直到线程执行完毕
  return 0;
}

Thread-Synchronisationsmechanismus

Um die Konsistenz gemeinsamer Daten zwischen Threads aufrechtzuerhalten, müssen Sie einen Synchronisationsmechanismus verwenden:

Mutex (Mutex )

#include <mutex>

std::mutex mutex;

void thread_function() {
  std::lock_guard<std::mutex> lock(mutex);
  // 对共享数据进行操作
}

Bedingungsvariable

#include <condition_variable>

std::condition_variable cv;
std::mutex cv_mutex;

void thread_function() {
  std::unique_lock<std::mutex> lock(cv_mutex);
  cv.wait(lock, [] { return condition_is_met; });
  // 条件满足时,继续执行
}

Spinlock

#include <atomic>

std::atomic_flag spinlock = ATOMIC_FLAG_INIT;

void thread_function() {
  while (spinlock.test_and_set(std::memory_order_acquire));
  // 对共享数据进行操作
  spinlock.clear(std::memory_order_release);
}

Praktischer Fall

Gleichzeitige Berechnung und Summierung

#include <thread>
#include <vector>

std::mutex sum_mutex;
long long sum = 0;

void add_numbers(const std::vector<int>& numbers) {
  for (int num : numbers) {
    std::lock_guard<std::mutex> lock(sum_mutex);
    sum += num;
  }
}

int main() {
  std::vector<std::thread> threads;
  std::vector<int> numbers = {...};  // 要相加的数字列表

  // 创建并执行线程
  for (size_t i = 0; i < std::thread::hardware_concurrency(); i++) {
    threads.emplace_back(add_numbers, numbers);
  }

  // 等待所有线程结束
  for (auto& thread : threads) {
    thread.join();
  }

  std::cout << "Sum: " << sum << std::endl;
  return 0;
}

Das obige ist der detaillierte Inhalt vonWie erstelle und verwalte ich Threads in C++? Welche Thread-Synchronisationsmechanismen gibt es?. 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