Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk mencipta dan menggunakan multi-threading dalam perpustakaan C++?

Bagaimana untuk mencipta dan menggunakan multi-threading dalam perpustakaan C++?

WBOY
Lepaskan: 2024-04-18 14:39:02
asal
1021 orang telah melayarinya

Jawapan: Dalam C++, anda boleh menggunakan perpustakaan fungsi std::thread untuk mencipta dan menggunakan berbilang benang untuk melaksanakan pengaturcaraan serentak. Penerangan terperinci: Gunakan std::thread untuk membuat thread baharu dan laksanakan kod yang ditentukan dalam thread anak. Gunakan mekanisme penyegerakan seperti mutex dan pembolehubah keadaan untuk memastikan capaian selamat benang kepada data kongsi. Kes praktikal menunjukkan pengisihan tatasusunan selari, di mana berbilang utas menyusun subset tatasusunan serentak, meningkatkan kecekapan.

C++ 函数库如何创建和使用多线程?

C++ Function Library: Mencipta dan Menggunakan Multithreading

Pengenalan

Multiplethreading ialah teknik pengaturcaraan serentak yang membolehkan berbilang tugasan dilakukan pada masa yang sama. Dalam C++, anda boleh membuat dan menggunakan berbilang benang dengan mudah dengan menggunakan perpustakaan seperti std::thread. std::thread)轻松创建和使用多线程。

创建线程

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

Buat utas

Untuk mencipta utas, anda boleh menggunakan std::thread Kelas:

#include <thread>

using namespace std;

void thread_function() {
  // 要在子线程中执行的代码
}

int main() {
  thread th(thread_function); // 创建新线程
  th.join(); // 等待子线程完成
  return 0;
}
Salin selepas log masuk

Menyegerakkan utas

Untuk memastikan berbilang rangkaian, anda mengakses data kongsi dengan selamat boleh menggunakan penyegerakan Mekanisme seperti mutex dan pembolehubah keadaan:

#include <mutex>
#include <condition_variable>

using namespace std;

mutex mtx; // 互斥锁
condition_variable cv; // 条件变量

int shared_data = 0; // 共享数据

void thread_function() {
  while (true) {
    mtx.lock();
    // 对共享数据进行操作
    mtx.unlock();

    // 通知等待条件变量的线程
    cv.notify_all();
  }
}

int main() {
  thread th(thread_function); // 创建线程

  // 等待条件变量被通知
  unique_lock<mutex> lock(mtx);
  cv.wait(lock);

  // 对共享数据进行操作

  th.join(); // 等待子线程完成
  return 0;
}
Salin selepas log masuk

🎜 Kes praktikal: Isih tatasusunan selari 🎜🎜🎜 Kita boleh menggunakan multi-threading untuk mengisih tatasusunan selari: 🎜
#include <thread>
#include <vector>
#include <algorithm>

using namespace std;

void merge(vector<int>& arr, int l, int m, int r) {
  // 对两个子数组进行归并排序
}

void merge_sort(vector<int>& arr, int l, int r) {
  if (l < r) {
    int m = l + (r - l) / 2;
    thread th1(merge_sort, ref(arr), l, m);
    thread th2(merge_sort, ref(arr), m + 1, r);
    th1.join();
    th2.join();
    merge(arr, l, m, r);
  }
}

int main() {
  vector<int> arr = {3, 1, 4, 2, 5};
  merge_sort(arr, 0, arr.size() - 1);
  return 0;
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk mencipta dan menggunakan multi-threading dalam perpustakaan C++?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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