Heim > Backend-Entwicklung > C++ > 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?

王林
Freigeben: 2024-05-07 21:03:01
Original
564 Leute haben es durchsucht

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;
}
Nach dem Login kopieren

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);
  // 对共享数据进行操作
}
Nach dem Login kopieren

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; });
  // 条件满足时,继续执行
}
Nach dem Login kopieren

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);
}
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage