Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk mencipta dan mengurus benang dalam C++? Apakah mekanisme penyegerakan benang yang ada?

Bagaimana untuk mencipta dan mengurus benang dalam C++? Apakah mekanisme penyegerakan benang yang ada?

王林
Lepaskan: 2024-05-07 21:03:01
asal
564 orang telah melayarinya

Thread dalam C++ Threads ialah unit pelaksanaan ringan yang membolehkan pengaturcaraan serentak. Gunakan kelas std::thread untuk mencipta benang dan mengekalkan ketekalan data yang dikongsi melalui mekanisme penyegerakan seperti mutex, pembolehubah keadaan dan kunci putaran. Kes praktikal menunjukkan proses menggunakan benang untuk mengira jumlah secara serentak.

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

Penciptaan dan Pengurusan Thread dalam C++

Thread ialah unit pelaksanaan ringan yang berkongsi ruang alamat yang sama dengan proses, membolehkan pengaturcaraan serentak.

Buat utas

Dalam C++, gunakan kelas std::thread untuk mencipta utas:

#include <thread>

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

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

Mekanisme penyegerakan benang

Untuk mengekalkan konsistensi data yang dikongsi antara utas, anda perlu menggunakan mekanisme penyegerakan:

Mutex (

)

#include <mutex>

std::mutex mutex;

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

Pembolehubah Keadaan

#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; });
  // 条件满足时,继续执行
}
Salin selepas log masuk

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);
}
Salin selepas log masuk

Kes praktikal

Pengiraan dan penjumlahan serentak

#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;
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk mencipta dan mengurus benang dalam C++? Apakah mekanisme penyegerakan benang yang ada?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan