Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Pembaca/Penulis Mengunci dalam C Mengoptimumkan Akses Serentak untuk Pembaca Kerap dan Penulis Jarang?

Bagaimanakah Pembaca/Penulis Mengunci dalam C Mengoptimumkan Akses Serentak untuk Pembaca Kerap dan Penulis Jarang?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-03 21:19:12781semak imbas

How Can Reader/Writer Locks in C   Optimize Concurrent Access for Frequent Readers and Infrequent Writers?

Pembaca/Penulis Mengunci dalam C : Penyelesaian Cekap untuk Pembaca Kerap dan Penulis Jarang

Dalam C , kunci pembaca/penulis adalah penting penyegerakan primitif direka untuk mengoptimumkan akses serentak kepada data yang dikongsi oleh berbilang rangkaian. Kes penggunaan yang sering mendapat manfaat daripada kunci pembaca/penulis ialah apabila terdapat seorang, penulis yang jarang dan ramai pembaca yang kerap. Artikel ini meneroka pendekatan standard C untuk melaksanakan kunci pembaca/penulis dan alternatif menggunakan Boost untuk versi pengkompil yang lebih lama.

Penyelesaian Standard C (C 14)

Yang diutamakan penyelesaian merentas platform dalam versi C moden (sejak C 14 dan VS2015) adalah untuk memanfaatkan perpustakaan standard pengepala. Ini menyediakan jenis kunci berikut:

  • std::shared_mutex (aka Lock): Kelas kunci asas
  • std::unique_lock (aka WriteLock): Kunci unik yang membenarkan akses tulis eksklusif kepada data kongsi
  • std::shared_lock (aka ReadLock): Kunci kongsi yang membenarkan akses baca serentak kepada data kongsi

Boost Solution for Old Versions

Untuk versi dan standard pengkompil yang lebih lama, alternatif yang mantap ialah menggunakan perpustakaan Boost threading. Boost menyediakan jenis kunci berikut:

  • boost::shared_mutex (aka Lock): Kelas kunci asas
  • boost::unique_lock (aka WriteLock): Kunci unik yang membenarkan akses tulis eksklusif kepada data kongsi
  • boost::shared_lock (aka ReadLock): Kunci kongsi yang membenarkan akses baca serentak kepada data kongsi

Contoh Penggunaan

Berikut ialah cara menggunakan kedua-dua C standard dan Boost penyelesaian:

Standard C (C 14):

#include <shared_mutex>

typedef std::shared_mutex Lock;
typedef std::unique_lock< Lock > WriteLock;
typedef std::shared_lock< Lock > ReadLock;

Lock myLock;

void ReadFunction()
{
    ReadLock r_lock(myLock);
    // Do reader stuff
}

void WriteFunction()
{
    WriteLock w_lock(myLock);
    // Do writer stuff
}

Boost:

#include <boost/thread/locks.hpp>
#include <boost/thread/shared_mutex.hpp>

typedef boost::shared_mutex Lock;
typedef boost::unique_lock< Lock > WriteLock;
typedef boost::shared_lock< Lock > ReadLock;

Lock myLock;

void ReadFunction()
{
    ReadLock r_lock(myLock);
    // Do reader stuff
}

void WriteFunction()
{
    WriteLock w_lock(myLock);
    // Do writer stuff
}

Dengan memilih penyelesaian yang sesuai berdasarkan platform dan versi C anda, anda boleh mengurus perkongsian dengan cekap sumber dan mengoptimumkan prestasi untuk aplikasi serentak anda di mana terdapat lebih ramai pembaca berbanding penulis.

Atas ialah kandungan terperinci Bagaimanakah Pembaca/Penulis Mengunci dalam C Mengoptimumkan Akses Serentak untuk Pembaca Kerap dan Penulis Jarang?. 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