Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk melaksanakan multithreading menggunakan perpustakaan standard C++?

Bagaimana untuk melaksanakan multithreading menggunakan perpustakaan standard C++?

WBOY
Lepaskan: 2024-06-03 15:06:56
asal
748 orang telah melayarinya

Kaedah untuk melaksanakan berbilang benang dalam pustaka standard C++: sertakan fail pengepala: #include <thread> buat objek thread: std::thread t(function_or_lambda) start thread: t.start() tunggu sehingga thread selesai: t .join()

Bagaimana untuk melaksanakan multithreading menggunakan perpustakaan standard C++?

Gunakan pustaka standard C++ untuk melaksanakan multi-threading

Multi-threading merujuk kepada melaksanakan berbilang tugasan yang berbeza pada masa yang sama dalam program Ini adalah konsep yang sangat penting untuk meningkatkan keselarasan dan tindak balas program kelajuan. Pustaka standard C++ menyediakan beberapa kelas dan fungsi yang menjadikan multithreading mudah.

Begini caranya untuk melaksanakan multithreading menggunakan perpustakaan standard C++:

  1. Sertakan fail pengepala:

    #include <thread>
    Salin selepas log masuk
  2. Buat objek utas:
    :std::thread 类来创建线程对象,并指定要执行的函数或可调用对象。

    std::thread t(function_or_lambda);
    Salin selepas log masuk
  3. 启动线程:
    使用 std::thread::start() 方法来启动线程。此方法将开始一个新的线程,并执行指定的函数或可调用对象。

    t.start();
    Salin selepas log masuk
  4. 等待线程完成:
    使用 std::thread::join()>kekodkan:<>untuk membaca kelas mencipta objek Thread dan menentukan fungsi atau objek boleh dipanggil untuk dilaksanakan.

    t.join();
    Salin selepas log masuk

Mulakan utas:

Gunakan kaedah std::thread::start() untuk memulakan utas. Kaedah ini akan memulakan utas baharu dan melaksanakan fungsi yang ditentukan atau objek boleh dipanggil.

#include <thread>
#include 

using namespace std;

vector numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int num_threads = 4;

int sum(const vector& arr, int start, int end) {
  int sum = 0;
  for (int i = start; i < end; i++) {
    sum += arr[i];
  }
  return sum;
}

int main() {
  // 创建线程数组
  vector threads(num_threads);

  // 计算每个线程负责的范围
  int chunk_size = numbers.size() / num_threads;
  vector partial_sums(num_threads);

  for (int i = 0; i < num_threads; i++) {
    int start = i * chunk_size;
    int end = min((i + 1) * chunk_size, numbers.size());
    
    // 创建线程并计算部分和
    threads[i] = thread(sum, ref(numbers), start, end);
  }

  // 等待所有线程完成
  for (int i = 0; i < num_threads; i++) {
    threads[i].join();
  }

  // 计算总体和
  int total_sum = 0;
  for (int partial_sum : partial_sums) {
    total_sum += partial_sum;
  }

  cout << "Total sum: " << total_sum << endl;

  return 0;
}
Salin selepas log masuk

🎜Menunggu urutan selesai: 🎜🎜Gunakan kaedah std::thread::join() untuk menunggu urutan menyelesaikan tugasnya. 🎜rrreee🎜🎜🎜Kes praktikal: 🎜🎜🎜Kira hasil tambah berbilang nombor: 🎜🎜🎜Gunakan multi-benang untuk mengira jumlah set nombor. Pisahkan tatasusunan kepada subarray dan cipta berbilang benang untuk mengira jumlah setiap subarray secara serentak. Akhir sekali, jumlah subarray yang dikira oleh setiap utas ditambah untuk mendapatkan jumlahnya. 🎜rreeee

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan multithreading menggunakan perpustakaan 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