Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk mencipta dan mengurus benang dalam C++? Apakah mekanisme penyegerakan benang yang ada?
Thread dalam C++ Threads ialah unit pelaksanaan ringan yang membolehkan pengaturcaraan serentak. Gunakan kelas std::thread untuk mencipta benang dan mengekalkan ketekalan data yang dikongsi melalui mekanisme penyegerakan seperti mutex, pembolehubah keadaan dan kunci putaran. Kes praktikal menunjukkan proses menggunakan benang untuk mengira jumlah secara serentak.
Thread ialah unit pelaksanaan ringan yang berkongsi ruang alamat yang sama dengan proses, membolehkan pengaturcaraan serentak.
Dalam C++, gunakan kelas std::thread
untuk mencipta utas:
#include <thread> void thread_function() { // 执行线程任务 } int main() { std::thread thread(thread_function); thread.join(); // 阻塞主线程,直到线程执行完毕 return 0; }
Untuk mengekalkan konsistensi data yang dikongsi antara utas, anda perlu menggunakan mekanisme penyegerakan:
Mutex (#include <mutex> std::mutex mutex; void thread_function() { std::lock_guard<std::mutex> lock(mutex); // 对共享数据进行操作 }
#include <condition_variable> std::condition_variable cv; std::mutex cv_mutex; void thread_function() { std::unique_lock<std::mutex> lock(cv_mutex); cv.wait(lock, [] { return condition_is_met; }); // 条件满足时,继续执行 }
#include <atomic> std::atomic_flag spinlock = ATOMIC_FLAG_INIT; void thread_function() { while (spinlock.test_and_set(std::memory_order_acquire)); // 对共享数据进行操作 spinlock.clear(std::memory_order_release); }
Pengiraan dan penjumlahan serentak
#include <thread> #include <vector> std::mutex sum_mutex; long long sum = 0; void add_numbers(const std::vector<int>& numbers) { for (int num : numbers) { std::lock_guard<std::mutex> lock(sum_mutex); sum += num; } } int main() { std::vector<std::thread> threads; std::vector<int> numbers = {...}; // 要相加的数字列表 // 创建并执行线程 for (size_t i = 0; i < std::thread::hardware_concurrency(); i++) { threads.emplace_back(add_numbers, numbers); } // 等待所有线程结束 for (auto& thread : threads) { thread.join(); } std::cout << "Sum: " << sum << std::endl; return 0; }
Atas ialah kandungan terperinci Bagaimana untuk mencipta dan mengurus benang dalam C++? Apakah mekanisme penyegerakan benang yang ada?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!