Rumah >pembangunan bahagian belakang >C++ >Mengapa Program Berbilang Benang Saya Gantung Apabila Disusun dengan Pengoptimuman?
Masalah:
Atur cara multithreading yang mudah berfungsi secara tidak dijangka apabila disusun dalam mod yang dioptimumkan. Semasa program berjalan seperti biasa dalam mod nyahpepijat atau dengan -O0, ia menjadi tersekat apabila disusun dengan -O1, -O2, atau -O3.
Penyelesaian:
The isu terletak pada akses bukan atom kepada pembolehubah siap. Dalam persekitaran berbilang benang, dua utas yang mengakses pembolehubah bukan atom yang tidak dikawal boleh membawa kepada tingkah laku yang tidak ditentukan. Untuk membetulkannya, pembolehubah siap hendaklah dibuat atom.
Betulkan:
#include <iostream> #include <future> #include <atomic> static std::atomic<bool> finished = false; int func() { size_t i = 0; while (!finished) ++i; return i; } int main() { auto result = std::async(std::launch::async, func); std::this_thread::sleep_for(std::chrono::seconds(1)); finished = true; std::cout << "result = " << result.get() << std::endl; std::cout << "\nmain thread>
Penjelasan:
Oleh menggunakan std::atomic
Nota Tambahan:
Atas ialah kandungan terperinci Mengapa Program Berbilang Benang Saya Gantung Apabila Disusun dengan Pengoptimuman?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!