Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apakah jenis dan kegunaan kunci dalam pengaturcaraan berbilang benang C++?

Apakah jenis dan kegunaan kunci dalam pengaturcaraan berbilang benang C++?

WBOY
WBOYasal
2024-06-01 09:31:57802semak imbas

Jenis kunci dalam pengaturcaraan berbilang benang C++ termasuk: Kunci Mutex: pastikan hanya satu utas dibenarkan untuk mengakses kunci baca-tulis pada satu masa: benarkan berbilang utas membaca sumber dikongsi pada masa yang sama, tetapi hanya satu utas boleh menulis kepada mereka pada satu masa kunci Putar : Sentiasa semak status kunci untuk mengelakkan menunggu kunci tersedia Pembolehubah keadaan: digunakan untuk menunggu syarat tertentu dipenuhi

C++ 多线程编程中的锁的类型和用途有哪些?

The. jenis dan tujuan kunci dalam pengaturcaraan berbilang benang C++

Lock digunakan dalam pengaturcaraan berbilang benang Alat penting untuk menyelaraskan akses benang kepada sumber yang dikongsi. Dalam C++, terdapat beberapa jenis kunci, masing-masing mempunyai tujuan tersendiri.

1. Kunci Mutex (Mutex)

Kunci Mutex ialah jenis kunci paling asas, yang hanya membenarkan satu utas mengakses bahagian kritikal (sumber dikongsi) pada satu masa.

// 创建一个互斥锁
std::mutex mtx;

// 获取互斥锁(线程等待直到锁可用)
mtx.lock();

// 使用临界区
// ...

// 释放互斥锁(允许其他线程获取锁)
mtx.unlock();

2. Kunci baca-tulis (RWLock)

Kunci baca-tulis membenarkan berbilang urutan membaca sumber yang dikongsi pada masa yang sama, tetapi hanya satu utas boleh menulis pada satu masa.

// 创建一个读写锁
std::shared_timed_mutex rwmtx;

// 获取读锁(线程可以在其他线程读取时读取)
rwmtx.lock_shared();

// 获取写锁(线程必须独占访问共享资源)
rwmtx.lock();

// 读取或写入临界区
// ...

// 释放锁
rwmtx.unlock();
rwmtx.unlock_shared();

3. Spinlock (Spinlock)

Kunci putaran adalah serupa dengan kunci mutex, tetapi apabila kunci tidak tersedia, kunci putaran akan memeriksa status kunci secara berterusan dan bukannya menunggu.

// 创建一个自旋锁
std::atomic_flag spinlock = ATOMIC_FLAG_INIT;

// 获取自旋锁
while (spinlock.test_and_set(std::memory_order_acquire));

// 使用临界区
// ...

// 释放自旋锁
spinlock.clear(std::memory_order_release);

4. Pembolehubah Keadaan

Pembolehubah keadaan digunakan untuk menunggu syarat tertentu dipenuhi. Ia digunakan bersama dengan kunci mutex untuk membenarkan benang menunggu apabila syarat tidak dipenuhi, dan membangunkan benang untuk meneruskan pelaksanaan.

// 创建一个条件变量
std::condition_variable cv;

// 获取互斥锁
std::mutex mtx;
mtx.lock();

// 等待条件满足
cv.wait(mtx);

// 执行被唤醒后的操作
// ...

// 释放互斥锁
mtx.unlock();

Contoh Praktikal

Pertimbangkan aplikasi yang mengandungi baris gilir selamat benang. Struktur baris gilir mengandungi mutex yang melindungi operasi baris gilir.

class Queue {
    private:
        std::queue<int> queue;
        std::mutex mtx;
    public:
        void push(int value) {
            std::lock_guard<std::mutex> lock(mtx);
            queue.push(value);
        }

        int pop() {
            std::lock_guard<std::mutex> lock(mtx);
            int value = queue.front();
            queue.pop();
            return value;
        }
};

Dalam persekitaran berbilang benang, mutex memastikan hanya satu utas boleh mengakses baris gilir pada satu masa, sekali gus menghalang perlumbaan data dan rasuah baris gilir.

Atas ialah kandungan terperinci Apakah jenis dan kegunaan kunci dalam pengaturcaraan berbilang benang 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