Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Amalan terbaik untuk pengaturcaraan berbilang benang dalam C++

Amalan terbaik untuk pengaturcaraan berbilang benang dalam C++

WBOY
WBOYasal
2024-05-31 21:33:01261semak imbas

Pengaturcaraan berbilang benang Fahami konsep multi-benang, gunakan perpustakaan std::thread untuk mencipta dan mengurus benang, dan mencapai penyegerakan dan komunikasi melalui kunci mutex, pembolehubah keadaan dan operasi atom. Kes praktikal: Gunakan berbilang benang untuk pengkomputeran selari, peruntukkan tugas kepada berbilang benang dan kumpulkan hasil untuk meningkatkan kecekapan.

C++ 多线程编程的最佳实践

Amalan Terbaik untuk Pengaturcaraan Berbilang Benang dalam C++

Fahami Konsep Berbilang Benang

Pengaturcaraan Berbilang Benang ialah paradigma pengaturcaraan serentak yang membolehkan berbilang tugasan dilakukan pada masa yang sama. Dalam C++, multithreading boleh dilaksanakan dengan mudah menggunakan pustaka std::thread. std::thread 库来轻松实现多线程。

创建和管理线程

要创建线程,可以使用 std::thread

Buat dan urus utas

Untuk mencipta utas, anda boleh menggunakan pembina std::thread dan lulus objek boleh panggil sebagai parameter:

#include <thread>

void print_hello() {
  std::cout << "Hello from a thread!" << std::endl;
}

int main() {
  std::thread t(print_hello);
  t.join();  // 等待线程完成执行
  return 0;
}

Penyegerakan dan komunikasi
  • Apabila terdapat berbilang utas Penyegerakan dan komunikasi adalah penting apabila mengakses sumber yang dikongsi. C++ menyediakan pelbagai primitif penyegerakan, termasuk:
  • Mutex (Mutex): membenarkan hanya satu utas untuk mengakses bahagian kritikal pada satu masa.
  • Pembolehubah Keadaan: Membolehkan benang menunggu untuk syarat tertentu dipenuhi.
Operasi Atom

: Menyediakan kemas kini selamat benang dan operasi baca.

Kes Praktikal: Pengkomputeran Selari

Berikut ialah kes praktikal menggunakan multi-threading untuk pengkomputeran selari: 🎜
#include <thread>
#include <vector>

std::vector<int> numbers;  // 输入数组

void calculate_sum(int start, int end, int& sum) {
  for (int i = start; i < end; i++) {
    sum += numbers[i];
  }
}

int main() {
  // 将输入数组分成多个部分
  std::vector<int> parts;
  int part_size = numbers.size() / 4;
  for (int i = 0; i < 4; i++) {
    parts.push_back(i * part_size);
  }
  parts.push_back(numbers.size());

  // 创建线程并分配每个部分的任务
  std::vector<std::thread> threads;
  std::vector<int> sums(4);
  for (int i = 0; i < 4; i++) {
    threads.push_back(std::thread(calculate_sum, parts[i], parts[i + 1], std::ref(sums[i])));
  }

  // 等待所有线程完成并累加结果
  for (auto& t : threads) {
    t.join();
  }
  int total_sum = accumulate(sums.begin(), sums.end(), 0);
  std::cout << "Total sum: " << total_sum << std::endl;

  return 0;
}
🎜Dengan melakukan pengiraan selari pada berbilang benang, program ini boleh meningkatkan kecekapan pengkomputeran dengan ketara. 🎜

Atas ialah kandungan terperinci Amalan terbaik untuk pengaturcaraan berbilang benang dalam C++. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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