Dengan peningkatan berterusan prestasi perkakasan komputer, keperluan orang ramai untuk pemprosesan berbilang teras menjadi lebih kuat dan kukuh. Pada masa yang sama, sistem pengendalian moden juga menyediakan sokongan yang semakin lengkap untuk pengaturcaraan serentak, yang menjadikan pengaturcaraan serentak sebagai bahagian yang amat diperlukan dalam bidang pengaturcaraan. Dalam konteks ini, C++, sebagai bahasa pengaturcaraan berprestasi tinggi yang digunakan secara meluas, juga menyediakan banyak alatan dan perpustakaan pengaturcaraan serentak yang berkuasa.
Artikel ini akan memperkenalkan beberapa konsep dan teknik pengaturcaraan serentak C++ asas dan menunjukkan penggunaannya melalui kod contoh mudah.
Asas berbilang benang
Berbilang benang ialah model pengaturcaraan serentak yang biasa digunakan yang membenarkan atur cara untuk melaksanakan berbilang aliran arahan pada masa yang sama. Dalam C++, pengaturcaraan berbilang benang boleh dicapai melalui fail pengepala
#include <iostream> #include <thread> void hello() { std::cout << "Hello" << std::endl; } int main() { std::thread t(hello); t.join(); return 0; }
Kod ini mentakrifkan fungsi bernama hello, yang akan mengeluarkan rentetan "Hello". Dalam fungsi utama, atur cara mencipta benang baru t dan menggunakan fungsi helo sebagai fungsi pelaksanaan benang. Pernyataan t.join() menunggu urutan selesai dilaksanakan sebelum keluar dari program.
Mutex lock
Disebabkan pelaksanaan serentak berbilang rangkaian, sumber kongsi yang sama boleh diakses pada masa yang sama. Pada masa ini, mekanisme diperlukan untuk memastikan bahawa hanya satu utas boleh mengakses sumber yang dikongsi pada bila-bila masa. Mekanisme ini ialah kunci mutex.
Dalam C++, anda boleh menggunakan fail pengepala
#include <iostream> #include <thread> #include <mutex> std::mutex m; int sum = 0; void add() { m.lock(); sum += 1; m.unlock(); } int main() { std::thread t1(add); std::thread t2(add); t1.join(); t2.join(); std::cout << "sum = " << sum << std::endl; return 0; }
Kod ini mentakrifkan fungsi bernama add, yang akan meningkatkan jumlah pembolehubah global sebanyak 1. Dalam fungsi utama, program mencipta dua utas baru t1 dan t2, dan menggunakan fungsi tambah sebagai fungsi pelaksanaannya. Memandangkan sum ialah sumber yang dikongsi, kunci mutex m digunakan dalam fungsi tambah untuk memastikan akses kepada jumlah selamat untuk benang.
Operasi atom
Operasi atom ialah operasi khas yang boleh mengemas kini atau membaca sumber yang dikongsi tanpa mengunci. Dalam C++, anda boleh menggunakan fail pengepala
#include <iostream> #include <thread> #include <atomic> std::atomic<int> sum(0); void add() { sum += 1; } int main() { std::thread t1(add); std::thread t2(add); t1.join(); t2.join(); std::cout << "sum = " << sum << std::endl; return 0; }
Kod ini mentakrifkan pembolehubah atom bernama jumlah, yang nilai awalnya ialah 0. Dalam fungsi tambah, jumlah operasi atom += 1 digunakan untuk meningkatkan nilai jumlah sebanyak 1. Dalam fungsi utama, program mencipta dua utas baru t1 dan t2, dan menggunakan fungsi tambah sebagai fungsi pelaksanaannya. Oleh kerana jumlah ialah pembolehubah atom, jumlah operasi atom += 1 boleh memastikan keselamatan benang.
Ringkasan
Artikel ini memperkenalkan asas pengaturcaraan serentak dalam C++, termasuk multi-threading, kunci mutex dan operasi atom. Sudah tentu, C++ menyediakan lebih banyak alat pengaturcaraan serentak dan perpustakaan daripada ini, seperti pembolehubah keadaan, semaphore, kumpulan benang, dll. Dalam projek sebenar, memilih alatan dan perpustakaan pengaturcaraan serentak yang sesuai adalah sangat penting untuk memastikan ketepatan program dan meningkatkan prestasi dan kebolehselenggaraan program.
Atas ialah kandungan terperinci Kajian awal tentang pengaturcaraan serentak dalam C++. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!