unique_lock Sınıfı
bir kilitlenmesini ve kilidinin açılmasını yöneten nesneler oluşturmak için örneği oluşturulabilen bir mutex
şablonu temsil eder.
Sözdizimi
template <class Mutex>
class unique_lock;
Açıklamalar
Şablon bağımsız değişkeninin Mutex
bir mutex türünü adlandırması gerekir.
dahili olarak, bir unique_lock
ilişkilendirilmiş mutex
nesnenin işaretçisini ve geçerli iş parçacığının sahip mutex
olup olmadığını gösteren bir bool
depolar.
Üyeler
Genel Tür Tanımları
Adı | Açıklama |
---|---|
mutex_type |
şablon bağımsız değişkeninin eş anlamlısı Mutex . |
Ortak Oluşturucular
Adı | Açıklama |
---|---|
Unique_lock | Bir unique_lock nesne oluşturur. |
~unique_lock Yıkıcı | Nesnesiyle unique_lock ilişkili tüm kaynakları serbest bırakır. |
Genel Yöntemler
Adı | Açıklama |
---|---|
lock | İş parçacığı ilişkili mutex öğesinin sahipliğini elde edene kadar çağıran iş parçacığını engeller. |
Mutex | İlişkili mutex öğesine depolanmış işaretçiyi alır. |
owns_lock | Çağıran iş parçacığının ilişkili mutex öğesine sahip olup olmadığını belirtir. |
Sürüm | Nesnenin unique_lock ilişkili mutex nesneden ayrıştırılması. |
Takas | İlişkili mutex ve sahiplik durumunu belirtilen nesnenin durumuyla değiştirir. |
try_lock | engelleme olmadan ilişkili mutex sahipliğini elde etmeye çalışır. |
try_lock_for | engelleme olmadan ilişkili mutex sahipliğini elde etmeye çalışır. |
try_lock_until | engelleme olmadan ilişkili mutex sahipliğini elde etmeye çalışır. |
Kilidini | İlişkili mutex öğesinin sahipliğini serbest bırakır. |
Ortak İşleçler
Adı | Açıklama |
---|---|
işleç bool | Çağıran iş parçacığının ilişkili mutex öğesine sahip olup olmadığını belirtir. |
operator= | Depolanan mutex işaretçiyi ve ilişkili sahiplik durumunu belirtilen bir nesneden kopyalar. |
Devralma Hiyerarşisi
Unique_lock
Gereksinimler
Üst bilgi:<mutex>
Ad alanı: std
lock
İş parçacığı ilişkili mutex
öğesinin sahipliğini elde edene kadar çağıran iş parçacığını engeller.
void lock();
Açıklamalar
Depolanan mutex
işaretçi NULL ise, bu yöntem hata koduna operation_not_permitted
sahip bir system_error oluşturur.
Çağıran iş parçacığı ilişkili mutex
öğesine zaten sahipse, bu yöntem hata koduna resource_deadlock_would_occur
sahip bir system_error
oluşturur.
Aksi takdirde, bu yöntem ilişkili mutex
öğesini çağırır lock
ve iç iş parçacığı sahiplik bayrağını olarak true
ayarlar.
Mutex
İlişkili mutex
öğesine depolanmış işaretçiyi alır.
mutex_type *mutex() const noexcept;
işleç bool
Çağıran iş parçacığının ilişkili mutex'in sahipliğine sahip olup olmadığını belirtir.
explicit operator bool() noexcept
İade Değeri
true
mutex iş parçacığına sahipse; aksi takdirde false
.
operator=
Depolanan mutex
işaretçiyi ve ilişkili sahiplik durumunu belirtilen bir nesneden kopyalar.
unique_lock& operator=(unique_lock&& Other) noexcept;
Parametreler
Diğer
Bir unique_lock
nesnesi.
İade Değeri
*this
Açıklamalar
Çağıran iş parçacığı daha önce ilişkili mutex
olan öğesine sahipse, bu yöntem üzerinde mutex
çağrısından unlock
önce yeni değerleri atar.
Kopyalamadan sonra, bu yöntem Diğer'i varsayılan olarak oluşturulur duruma ayarlar.
owns_lock
Çağıran iş parçacığının ilişkili mutex
öğesine sahip olup olmadığını belirtir.
bool owns_lock() const noexcept;
İade Değeri
true
iş parçacığının sahibi mutex
ise ; değilse, false
.
Sürüm
Nesnenin unique_lock
ilişkili mutex
nesneden ayrıştırılması.
mutex_type *release() noexcept;
İade Değeri
Depolanan mutex
işaretçinin önceki değeri.
Açıklamalar
Bu yöntem, depolanan mutex
işaretçinin değerini 0 olarak ayarlar ve iç mutex
sahiplik bayrağını olarak false
ayarlar.
swap
İlişkili mutex
ve sahiplik durumunu belirtilen nesnenin durumuyla değiştirir.
void swap(unique_lock& Other) noexcept;
Parametreler
Diğer
Bir unique_lock
nesnesi.
try_lock
engelleme olmadan ilişkili mutex
sahipliğini elde etmeye çalışır.
bool try_lock() noexcept;
İade Değeri
true
yöntemi , öğesinin mutex
sahipliğini başarıyla alırsa, aksi takdirde . false
Açıklamalar
Depolanan mutex
işaretçi NULL ise, yöntemi hata koduna operation_not_permitted
sahip bir system_error oluşturur.
Çağıran iş parçacığına zaten sahipse mutex
yöntemi, hata koduna resource_deadlock_would_occur
sahip bir system_error
oluşturur.
try_lock_for
engelleme olmadan ilişkili mutex
sahipliğini elde etmeye çalışır.
template <class Rep, class Period>
bool try_lock_for(
const chrono::duration<Rep, Period>& Rel_time);
Parametreler
Rel_time
yönteminin sahipliğini mutex
elde etmeye çalıştığı maksimum süreyi belirten bir chrono::d uration nesnesi.
İade Değeri
true
yöntemi , öğesinin mutex
sahipliğini başarıyla alırsa, aksi takdirde . false
Açıklamalar
Depolanan mutex
işaretçi NULL ise, yöntemi hata koduna operation_not_permitted
sahip bir system_error oluşturur.
Çağıran iş parçacığına zaten sahipse mutex
yöntemi, hata koduna resource_deadlock_would_occur
sahip bir system_error
oluşturur.
try_lock_until
engelleme olmadan ilişkili mutex
sahipliğini elde etmeye çalışır.
template <class Clock, class Duration>
bool try_lock_until(const chrono::time_point<Clock, Duration>& Abs_time);
bool try_lock_until(const xtime* Abs_time);
Parametreler
Abs_time
Yöntemin artık sahipliğini mutex
elde etmeye çalışmadığı eşiği belirten bir zaman noktası.
İade Değeri
true
yöntemi , öğesinin mutex
sahipliğini başarıyla alırsa, aksi takdirde . false
Açıklamalar
Depolanan mutex
işaretçi NULL ise, yöntemi hata koduna operation_not_permitted
sahip bir system_error oluşturur.
Çağıran iş parçacığına zaten sahipse mutex
yöntemi, hata koduna resource_deadlock_would_occur
sahip bir system_error
oluşturur.
unique_lock Oluşturucu
Bir unique_lock
nesne oluşturur.
unique_lock() noexcept;
unique_lock(unique_lock&& Other) noexcept;
explicit unique_lock(mutex_type& Mtx);
unique_lock(mutex_type& Mtx, adopt_lock_t Adopt);
unique_lock(mutex_type& Mtx, defer_lock_t Defer) noexcept;
unique_lock(mutex_type& Mtx, try_to_lock_t Try);
template <class Rep, class Period>
unique_lock(mutex_type& Mtx,
const chrono::duration<Rep, Period>
Rel_time);
template <class Clock, class Duration>
unique_lock(mutex_type& Mtx,
const chrono::time_point<Clock, Duration>
Abs_time);
unique_lock(mutex_type& Mtx,
const xtime* Abs_time) noexcept;
Parametreler
Mtx
Bir mutex türü nesnesi.
Rel_time
yönteminin sahipliğini mutex
elde etmeye çalıştığı maksimum süreyi belirten bir chrono::d uration nesnesi.
Abs_time
Yöntemin artık sahipliğini mutex
elde etmeye çalışmadığı eşiği belirten bir zaman noktası.
Diğer
Bir unique_lock
nesnesi.
Açıklamalar
İlk oluşturucu, ilişkili bir mutex işaretçisi değeri 0 olan bir nesne oluşturur.
İkinci oluşturucu, ilişkili mutex durumunu Diğer'den taşır. Taşımadan sonra, Diğer artık bir mutex ile ilişkilendirilmemiştir.
Kalan oluşturucular , depolanan işaretçi olarak & Mtx'imutex
depolar. sahipliğini mutex
varsa ikinci bağımsız değişken belirler.
Adı | Açıklama |
---|---|
No argument |
Sahiplik, ilişkili mutex nesnede lock yöntemi çağrılarak elde edilir. |
Adopt |
Sahiplik varsayılır. Mtx oluşturucu çağrıldığında kilitlenmelidir. |
Defer |
Çağıran iş parçacığının nesneye sahip mutex olmadığı varsayılır. Mtx oluşturucu çağrıldığında kilitlenmemelidir. |
Try |
Sahiplik, ilişkili mutex nesnede çağrılarak try_lock belirlenir. Oluşturucu hiçbir şey atamaz. |
Rel_time |
Sahiplik, çağrılarak try_lock_for(Rel_time) belirlenir. |
Abs_time |
Sahiplik, çağrılarak try_lock_until(Abs_time) belirlenir. |
~unique_lock Yıkıcı
Nesnesiyle unique_lock
ilişkili tüm kaynakları serbest bırakır.
~unique_lock() noexcept;
Açıklamalar
Çağıran iş parçacığı ilişkili mutex
öğesine sahipse, yıkıcı nesne üzerinde mutex
unlock çağrısı yaparak sahipliği serbest bırakır.
Kilidini
İlişkili mutex
öğesinin sahipliğini serbest bırakır.
void unlock();
Açıklamalar
Çağıran iş parçacığı ilişkili mutex
öğesine sahip değilse, bu yöntem hata koduna operation_not_permitted
sahip bir system_error oluşturur.
Aksi takdirde, bu yöntem ilişkili mutex
öğesini çağırır unlock
ve iç iş parçacığı sahiplik bayrağını olarak false
ayarlar.
Ayrıca bkz.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin