Rumah >pembangunan bahagian belakang >C++ >Pelaksanaan pengecualian bersama dan bahagian kritikal fungsi C++ dalam pengaturcaraan serentak?

Pelaksanaan pengecualian bersama dan bahagian kritikal fungsi C++ dalam pengaturcaraan serentak?

WBOY
WBOYasal
2024-04-28 08:42:021055semak imbas

Dalam pengaturcaraan serentak, mutex dan bahagian kritikal digunakan untuk menghalang perlumbaan data. Mutex ialah struktur data yang membenarkan hanya satu utas untuk mengakses sumber yang dikongsi pada satu masa Pelaksanaan khusus adalah seperti berikut: Tentukan kelas Mutex dengan tag atom. Gunakan kaedah test_and_set() untuk mengunci dan kaedah clear() untuk membuka kunci. Bahagian kritikal ialah bahagian kod yang hanya boleh dilaksanakan oleh satu utas pada satu masa Pelaksanaan khusus adalah seperti berikut: mengisytiharkan mutex. Gunakan pembungkus lock_guard untuk mengakses sumber kongsi dalam bahagian kritikal.

C++ 函数在并发编程中的互斥和临界区实现?

C++ pelaksanaan fungsi pengecualian bersama dan bahagian kritikal dalam pengaturcaraan serentak

Dalam pengaturcaraan serentak, apabila beberapa utas mengakses sumber dikongsi pada masa yang sama, adalah perlu untuk mengelakkan persaingan data dan memastikan ketekalan data. Mutex dan bahagian kritikal adalah dua cara biasa untuk mencapai ini.

Mutex

Mutex ialah struktur data yang memastikan hanya satu utas boleh mengakses sumber yang dikongsi pada satu masa. Mutex biasanya dilaksanakan menggunakan kaedah berikut:

class Mutex {
private:
    std::atomic_flag flag;

public:
    void lock() {
        while (flag.test_and_set(std::memory_order_acquire));
    }

    void unlock() {
        flag.clear(std::memory_order_release);
    }
};

Bahagian Kritikal

Bahagian kritikal ialah bahagian kod yang hanya boleh dilaksanakan oleh satu utas pada bila-bila masa. Bahagian kritikal biasanya dilaksanakan menggunakan sintaks berikut:

std::mutex mutex;

void critical_section() {
    std::lock_guard<std::mutex> lock(mutex);
    // 共享资源的访问
}

Contoh praktikal

Pertimbangkan program yang mengandungi pembilang kongsi yang boleh dinaikkan berbilang urutan secara serentak. Lindungi kaunter menggunakan mutex:

Mutex counter_mutex;
int counter = 0;

void increment_counter() {
    counter_mutex.lock();
    counter++;
    counter_mutex.unlock();
}

Lindungi kaunter menggunakan bahagian kritikal:

std::mutex counter_mutex;

void increment_counter() {
    std::lock_guard<std::mutex> lock(counter_mutex);
    counter++;
}

Menggunakan mutex atau bahagian kritikal boleh memastikan bahawa hanya satu utas mengubah suai kaunter pada masa yang sama, sekali gus menghalang perlumbaan data. Pilihan yang tepat bergantung pada prestasi dan keperluan kerumitan aplikasi khusus anda.

Atas ialah kandungan terperinci Pelaksanaan pengecualian bersama dan bahagian kritikal fungsi C++ dalam pengaturcaraan serentak?. 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