Bagaimana untuk melaksanakan pengaturcaraan berbilang benang menggunakan perpustakaan benang standard C++?

WBOY
Lepaskan: 2024-06-04 19:36:00
asal
555 orang telah melayarinya

Pengaturcaraan berbilang benang meningkatkan kecekapan dengan melaksanakan tugas secara selari Langkah-langkah untuk melaksanakan berbilang benang menggunakan perpustakaan benang standard C++ adalah seperti berikut: Gunakan std::thread untuk mencipta benang dan menghantar objek boleh dipanggil (fungsi atau fungsi lambda. penunjuk) sebagai parameter pembina. Tunggu sehingga utas ditamatkan dengan memanggil kaedah join(), menyekat utas utama sehingga utas anak selesai melaksanakan. Kes praktikal: Kira nombor perdana secara selari, peruntukkan julat pengiraan kepada berbilang utas dan tunggu sehingga selesai, dan cetak senarai nombor perdana selepas menggabungkan keputusan.

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

Gunakan perpustakaan benang standard C++ untuk melaksanakan pengaturcaraan berbilang benang

pengaturcaraan berbilang benang meningkatkan kecekapan program dengan melaksanakan pelbagai tugas secara selari. Artikel ini akan memperkenalkan cara menggunakan perpustakaan benang standard C++ untuk melaksanakan pengaturcaraan berbilang benang dengan mudah, dan menggambarkannya melalui kes praktikal.

Creating Threads

Untuk mencipta thread, anda boleh menggunakan kelas std::thread, yang menerima rujukan kepada objek boleh panggil sebagai parameter kepada pembinanya. Objek boleh dipanggil biasanya fungsi lambda atau penunjuk fungsi. Contohnya: std::thread 类,它接收一个可调用对象的引用作为其构造函数的参数。可调用对象通常是一个 lambda 函数或一个函数指针。例如:

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

// 创建线程
std::thread t(thread_function);
Salin selepas log masuk

等待线程终止

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

// 等待子线程完成
t.join();
Salin selepas log masuk

Menunggu penamatan utas

Selepas mencipta utas, utas utama boleh menunggu penamatannya dengan memanggil kaedah join(). Kaedah join() menyekat utas utama sehingga utas penciptaan, dipanggil utas anak, menyelesaikan pelaksanaannya. Contohnya:

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

Kes amali: Pengiraan selari nombor perdana

Mari kita menunjukkan pengaturcaraan berbilang benang melalui kes praktikal. Kami akan menulis program yang menggunakan berbilang benang untuk mengira nombor perdana dalam julat tertentu secara selari.

rrreeeMenjalankan program ini akan mengeluarkan semua nombor perdana dalam julat yang diberikan.

🎜🎜🎜Nota: 🎜Tutorial ini menunjukkan konsep asas dan aplikasi praktikal pengaturcaraan berbilang benang menggunakan perpustakaan penjalinan standard C++. Untuk ciri yang lebih maju dan amalan terbaik, adalah disyorkan untuk merujuk dokumentasi perpustakaan standard C++ dan sumber dalam talian. 🎜

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pengaturcaraan berbilang benang menggunakan perpustakaan benang standard C++?. 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!