Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Melaksanakan Semantik Alih Selamat Benang untuk Kelas yang Mengandungi Mutex?

Bagaimana untuk Melaksanakan Semantik Alih Selamat Benang untuk Kelas yang Mengandungi Mutex?

Barbara Streisand
Barbara Streisandasal
2024-11-27 20:47:12912semak imbas

How to Implement Thread-Safe Move Semantics for Classes Containing Mutexes?

Semantik Pergerakan selamat benang untuk Objek yang Mengandungi Muteks

Masalah:

Mutex perpustakaan standard (std::mutex) tidak boleh disalin mahupun alih, menyebabkan ketiadaan pembina langkah lalai untuk kelas yang mengandungi mutex. Ini menimbulkan cabaran untuk mencapai jenis alih dengan cara selamat benang.

Penyelesaian:

Untuk menjadikan kelas yang mengandungi mutex boleh alih sambil memastikan keselamatan benang, perkara berikut langkah boleh diambil:

class A
{
    using MutexType = std::mutex;
    using ReadLock = std::unique_lock<MutexType>;
    using WriteLock = std::unique_lock<MutexType>;

    mutable MutexType mut_;
    // Other member variables...
};

Bergerak Pembina:

A(A&& a)
{
    WriteLock rhs_lk(a.mut_);
    // Copy or move member variables under rhs_lk protection.
}

Alih Tugasan:

A& operator=(A&& a)
{
    if (this != &a)
    {
        WriteLock lhs_lk(mut_, std::defer_lock);
        WriteLock rhs_lk(a.mut_, std::defer_lock);
        std::lock(lhs_lk, rhs_lk);
        // Copy or move member variables under combined lock.
    }
    return *this;
}

Salin Pembina:

A(const A& a)
{
    ReadLock rhs_lk(a.mut_);
    // Copy member variables under rhs_lk protection.
}

Salin Tugasan:

A& operator=(const A& a)
{
    if (this != &a)
    {
        WriteLock lhs_lk(mut_, std::defer_lock);
        ReadLock rhs_lk(a.mut_, std::defer_lock);
        std::lock(lhs_lk, rhs_lk);
        // Copy member variables under combined lock.
    }
    return *this;
}

Operasi pemindahan dan penyalinan selamat benang ini mengekalkan integriti mutex dan membenarkan pengubahsuaian yang boleh dipercayai dan akses kepada pembolehubah ahli di bawah perlindungan kunci.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Semantik Alih Selamat Benang untuk Kelas yang Mengandungi Mutex?. 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