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
Lepaskan: 2024-11-27 20:47:12
asal
849 orang telah melayarinya

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...
};
Salin selepas log masuk

Bergerak Pembina:

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

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 selepas log masuk

Salin Pembina:

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

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;
}
Salin selepas log masuk

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!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan