Rumah > pembangunan bahagian belakang > C++ > Pengaturcaraan serentak C++: Bagaimana untuk melaksanakan reka bentuk selamat benang bagi struktur data serentak?

Pengaturcaraan serentak C++: Bagaimana untuk melaksanakan reka bentuk selamat benang bagi struktur data serentak?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Lepaskan: 2024-05-03 17:15:01
asal
911 orang telah melayarinya

Reka bentuk struktur data serentak selamat benang: Kaedah pelaksanaan: jenis atom dan mutex lock jenis atom: pastikan berbilang akses tidak boleh dibahagikan dan pastikan data konsisten. Kunci Mutex: mengehadkan akses kepada data yang dikongsi oleh satu utas pada satu masa untuk mengelakkan rasuah data serentak. Contoh: Barisan Selamat Benang menunjukkan struktur data selamat benang dilaksanakan menggunakan kunci mutex. . Dalam pengaturcaraan serentak C++, mencapai keselamatan benang adalah penting.

Jenis Atom dan Muteks Pengaturcaraan serentak C++: Bagaimana untuk melaksanakan reka bentuk selamat benang bagi struktur data serentak?

Jenis Atom:

Jenis atom memastikan berbilang akses kepada data asas tidak boleh dibahagikan untuk menjamin konsistensi. Contohnya, std::atomic<int></int> .

Kunci Mutex:

Kunci Mutex membenarkan satu utas mengakses data yang dikongsi pada satu masa, sekali gus menghalang kerosakan data yang disebabkan oleh akses serentak. Gunakan std::mutex .

Contoh: Giliran Selamat Benang
Berikut ialah baris gilir selamat benang mudah dilaksanakan menggunakan mutex: std::atomic<int></int>

互斥锁:
互斥锁允许一个线程一次访问共享数据,从而防止并发访问导致的数据损坏。使用 std::mutex

实例:线程安全队列

以下是一个使用互斥锁实现的简单的线程安全队列:

#include <iostream>
#include <mutex>
#include <queue>

class ThreadSafeQueue {
private:
    std::queue<int> data;
    std::mutex mtx;

public:
    void push(int value) {
        std::lock_guard<std::mutex> lock(mtx);
        data.push(value);
    }

    int pop() {
        std::lock_guard<std::mutex> lock(mtx);
        if (data.empty()) throw std::runtime_error("Queue is empty");
        int value = data.front();
        data.pop();
        return value;
    }

    bool empty() {
        std::lock_guard<std::mutex> lock(mtx);
        return data.empty();
    }
};

int main() {
    ThreadSafeQueue queue;

    std::thread t1([&queue] {
        for (int i = 0; i < 1000; ++i) {
            std::lock_guard<std::mutex> lock(queue.mtx);
            queue.push(i);
        }
    });

    std::thread t2([&queue] {
        while (!queue.empty()) {
            std::lock_guard<std::mutex> lock(queue.mtx);
            std::cout << "Thread 2 popped: " << queue.pop() << std::endl;
        }
    });

    t1.join();
    t2.join();

    return 0;
}
Salin selepas log masuk

在这个示例中:

  • std::mutex 用于保护对队列数据的并发访问。
  • std::lock_guardrrreee
  • Dalam contoh ini:
    • std::mutex digunakan Lindungi serentak akses kepada data baris gilir.

    std::lock_guard digunakan untuk mengunci mutex apabila memasuki bahagian kritikal baris gilir dan membuka kuncinya apabila keluar.

    Berbilang utas boleh menolak dan meletuskan data dengan selamat ke baris gilir secara serentak.

    🎜🎜Kesimpulan🎜🎜 Melaksanakan struktur data serentak selamat benang ialah aspek penting dalam pengaturcaraan serentak dalam C++. Dengan menggunakan mekanisme seperti jenis atom dan kunci mutex, kami boleh memastikan ketekalan data dan mencegah kerosakan data atau ranap program yang disebabkan oleh akses serentak. 🎜

    Atas ialah kandungan terperinci Pengaturcaraan serentak C++: Bagaimana untuk melaksanakan reka bentuk selamat benang bagi struktur data serentak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan Laman Web ini
    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
    Tutorial Popular
    Lagi>
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan