Kelas reader_writer_lock
Kunci pembaca-penulis berbasis antrean berbasis antrean penulis dengan putaran lokal saja. Kunci memberikan akses pertama masuk - keluar pertama (FIFO) ke penulis dan pembaca kelaparan di bawah beban penulis berkelanjutan.
Sintaks
class reader_writer_lock;
Anggota
Kelas Publik
Nama | Deskripsi |
---|---|
Kelas reader_writer_lock::scoped_lock | Pembungkus RAII aman pengecualian yang dapat digunakan untuk memperoleh reader_writer_lock objek kunci sebagai penulis. |
kelas reader_writer_lock::scoped_lock_read | Pembungkus RAII aman pengecualian yang dapat digunakan untuk memperoleh reader_writer_lock objek kunci sebagai pembaca. |
Konstruktor Publik
Nama | Deskripsi |
---|---|
reader_writer_lock | Membuat objek baru reader_writer_lock . |
~reader_writer_lock Destructor | reader_writer_lock Menghancurkan objek. |
Metode Publik
Nama | Deskripsi |
---|---|
kunci | Memperoleh kunci pembaca-penulis sebagai penulis. |
lock_read | Memperoleh kunci pembaca-penulis sebagai pembaca. Jika ada penulis, pembaca aktif harus menunggu sampai selesai. Pembaca hanya mendaftarkan minat pada kunci dan menunggu penulis melepaskannya. |
try_lock | Mencoba untuk memperoleh kunci pembaca-penulis sebagai penulis tanpa memblokir. |
try_lock_read | Mencoba untuk memperoleh kunci pembaca-penulis sebagai pembaca tanpa memblokir. |
Membuka | Membuka kunci pembaca-penulis berdasarkan siapa yang menguncinya, pembaca, atau penulis. |
Keterangan
Untuk informasi selengkapnya, lihat Struktur Data Sinkronisasi.
Hierarki Warisan
reader_writer_lock
Persyaratan
Header: concrt.h
Namespace: konkurensi
kunci
Memperoleh kunci pembaca-penulis sebagai penulis.
void lock();
Keterangan
Seringkali lebih aman untuk menggunakan konstruksi scoped_lock untuk memperoleh dan melepaskan reader_writer_lock
objek sebagai penulis dengan cara yang aman.
Setelah penulis mencoba untuk memperoleh kunci, setiap pembaca di masa depan akan memblokir sampai penulis berhasil memperoleh dan melepaskan kunci. Kunci ini bias terhadap penulis dan dapat membuat pembaca kelaparan di bawah beban penulis berkelanjutan.
Penulis ditautkan sehingga penulis yang keluar dari kunci melepaskan penulis berikutnya sejalan.
Jika kunci sudah dipegang oleh konteks panggilan, pengecualian improper_lock akan dilemparkan.
lock_read
Memperoleh kunci pembaca-penulis sebagai pembaca. Jika ada penulis, pembaca aktif harus menunggu sampai selesai. Pembaca hanya mendaftarkan minat pada kunci dan menunggu penulis melepaskannya.
void lock_read();
Keterangan
Seringkali lebih aman untuk menggunakan konstruksi scoped_lock_read untuk memperoleh dan melepaskan reader_writer_lock
objek sebagai pembaca dengan cara yang aman.
Jika ada penulis yang menunggu di kunci, pembaca akan menunggu sampai semua penulis sejalan telah memperoleh dan melepaskan kunci. Kunci ini bias terhadap penulis dan dapat membuat pembaca kelaparan di bawah beban penulis berkelanjutan.
reader_writer_lock
Membuat objek baru reader_writer_lock
.
reader_writer_lock();
~reader_writer_lock
reader_writer_lock
Menghancurkan objek.
~reader_writer_lock();
Keterangan
Diharapkan bahwa kunci tidak lagi dipegang ketika destruktor berjalan. Mengizinkan kunci penulis pembaca untuk dihancurkan dengan kunci yang masih ditahan menghasilkan perilaku yang tidak ditentukan.
Kelas reader_writer_lock::scoped_lock
Pembungkus RAII aman pengecualian yang dapat digunakan untuk memperoleh reader_writer_lock
objek kunci sebagai penulis.
class scoped_lock;
scoped_lock::scoped_lock
Membuat scoped_lock
objek dan memperoleh objek yang reader_writer_lock
diteruskan dalam _Reader_writer_lock
parameter sebagai penulis. Jika kunci dipegang oleh utas lain, panggilan ini akan memblokir.
explicit _CRTIMP scoped_lock(reader_writer_lock& _Reader_writer_lock);
Parameter
_Reader_writer_lock
Objek reader_writer_lock
untuk diperoleh sebagai penulis.
scoped_lock::~scoped_lock
reader_writer_lock
Menghancurkan objek dan melepaskan kunci yang disediakan dalam konstruktornya.
~scoped_lock();
kelas reader_writer_lock::scoped_lock_read
Pembungkus RAII aman pengecualian yang dapat digunakan untuk memperoleh reader_writer_lock
objek kunci sebagai pembaca.
class scoped_lock_read;
scoped_lock_read::scoped_lock_read
Membuat scoped_lock_read
objek dan memperoleh objek yang reader_writer_lock
diteruskan dalam _Reader_writer_lock
parameter sebagai pembaca. Jika kunci dipegang oleh utas lain sebagai penulis atau ada penulis yang tertunda, panggilan ini akan memblokir.
explicit _CRTIMP scoped_lock_read(reader_writer_lock& _Reader_writer_lock);
Parameter
_Reader_writer_lock
Objek reader_writer_lock
untuk diperoleh sebagai pembaca.
reader_writer_lock::scoped_lock_read::~scoped_lock_read Destructor
scoped_lock_read
Menghancurkan objek dan melepaskan kunci yang disediakan dalam konstruktornya.
~scoped_lock_read();
try_lock
Mencoba untuk memperoleh kunci pembaca-penulis sebagai penulis tanpa memblokir.
Sintaks
bool try_lock();
Tampilkan Nilai
Jika kunci diperoleh, nilai true
; jika tidak, nilai false
.
try_lock_read
Mencoba untuk memperoleh kunci pembaca-penulis sebagai pembaca tanpa memblokir.
bool try_lock_read();
Tampilkan Nilai
Jika kunci diperoleh, nilai true
; jika tidak, nilai false
.
Membuka
Membuka kunci pembaca-penulis berdasarkan siapa yang menguncinya, pembaca, atau penulis.
void unlock();
Keterangan
Jika ada penulis yang menunggu di kunci, pelepasan kunci akan selalu pergi ke penulis berikutnya dalam urutan FIFO. Kunci ini bias terhadap penulis dan dapat membuat pembaca kelaparan di bawah beban penulis berkelanjutan.
Baca juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk