Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk melaksanakan pengaturcaraan berbilang benang menggunakan fungsi C++?
Bagaimana untuk menggunakan fungsi C++ untuk melaksanakan pengaturcaraan berbilang benang? Cipta objek std::thread dengan objek boleh panggil. Panggil fungsi join() dan tunggu sehingga thread selesai. Gunakan teknik penyegerakan benang seperti mutex, pembolehubah keadaan dan semaphore untuk memastikan akses selamat kepada sumber yang dikongsi. Dalam kes praktikal, anda boleh mencipta benang untuk memproses fail secara selari untuk meningkatkan prestasi program. . Dalam C++, multithreading boleh dilaksanakan dengan menggunakan fungsi benang. Artikel ini menerangkan cara menggunakan fungsi C++ untuk mencipta dan mengurus benang.
Buat dan mulakan utas
Untuk mencipta utas, anda boleh menggunakan kelasstd::thread
. Kelas ini mengambil sebagai parameter objek boleh dipanggil yang mentakrifkan tugas yang akan dilakukan oleh benang. Berikut ialah contoh kod untuk mencipta utas: #include <thread> void thread_function() { // 线程要执行的任务 } int main() { std::thread t(thread_function); t.join(); // 等待线程完成 return 0; }Apabila objek
std::thread
dicipta, ia akan memanggil fungsi yang ditentukan dan mencipta utas baharu untuk melaksanakan fungsi. Fungsi join()
menunggu sehingga thread selesai, memastikan semua thread telah selesai sebelum thread utama keluar.
Penyegerakan Benang
Untuk memastikan akses selamat kepada sumber yang dikongsi dalam persekitaran berbilang benang, teknologi penyegerakan benang perlu digunakan. C++ menyediakan beberapa primitif penyegerakan, termasuk:
Digunakan untuk melindungi akses eksklusif kepada sumber yang dikongsi.
std::thread
类。该类采用一个可调用对象作为参数,该对象定义了线程要执行的任务。以下是创建线程的示例代码:#include <thread> #include <vector> #include <iostream> #include <fstream> using namespace std; vector<string> lines; void read_file(const string& filename) { ifstream file(filename); string line; while (getline(file, line)) { lines.push_back(line); } } void process_lines() { for (auto& line : lines) { // 处理行 cout << line << endl; } } int main() { // 创建读取和处理文件的线程 thread t1(read_file, "file1.txt"); thread t2(process_lines); // 等待线程完成 t1.join(); t2.join(); return 0; }
当 std::thread
对象被创建时,它将调用指定的函数,并创建一个新线程来执行该函数。join()
函数会等待线程完成,确保在主线程退出之前所有线程都已完成。
线程同步
为了确保共享资源在多线程环境中的安全访问,需要使用线程同步技术。C++ 提供了几种同步原语,包括:
实战案例
假设我们要创建一个并行处理文件的程序。我们可以使用多线程来同时读取和处理文件的不同部分。以下是程序示例:
rrreee在此示例中,read_file()
函数用于读取文件,而 process_lines()
Pembolehubah keadaan:
read_file()
digunakan untuk membaca fail, manakala fungsi process_lines()
digunakan untuk memproses setiap barisan. Multithreading membolehkan pembacaan dan pemprosesan fail berlaku serentak, sekali gus meningkatkan prestasi program. 🎜Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pengaturcaraan berbilang benang menggunakan fungsi C++?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!