Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Kajian awal tentang pengaturcaraan serentak dalam C++

Kajian awal tentang pengaturcaraan serentak dalam C++

WBOY
WBOYasal
2023-08-21 22:18:34643semak imbas

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 1690fad45fecaafa6184a1881253cee5 Berikut ialah contoh kod mudah menggunakan multi-threading:

#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 e517c9ed30f2300c1c910dc75c8db2c8 dalam pustaka standard untuk melaksanakan kunci mutex. Berikut ialah contoh kod mudah menggunakan kunci mutex:

#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 15a199175b5d79b4bf26b73c4a2287fc dalam pustaka standard untuk melaksanakan operasi atom. Berikut ialah contoh kod mudah menggunakan operasi atom:

#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!

Kenyataan:
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