<shared_mutex>
Üst bilgi, <shared_mutex>
birden çok iş parçacığı tarafından erişilebilen paylaşılan verilerin korunması için eşitleme temel öğelerini sağlar. Mutex sınıfları tarafından sağlanan özel erişim denetimine ek olarak, paylaşılan mutex sınıfları özel olmayan erişim için birden çok iş parçacığı tarafından paylaşılan sahiplik de sağlar. Paylaşılan mutex'ler, yarış durumuna neden olmadan birkaç iş parçacığı tarafından okunabilen kaynakları denetlemek için kullanılabilir, ancak yalnızca tek bir iş parçacığı tarafından yazılması gerekir.
Üst bilgi <shared_mutex>
, paylaşılan mutex desteği için sınıfları shared_mutex
ve shared_timed_mutex
, sınıf şablonunu shared_lock
ve şablon işlevini swap
tanımlar.
Sınıflar | Açıklama |
---|---|
shared_mutex Sınıfı | Yalnızca bir aracı tarafından kilitlenebilen veya birden çok aracı tarafından özel olarak paylaşılmayan paylaşılan bir mutex türü. |
shared_timed_mutex Sınıfı | Yalnızca bir aracı tarafından kilitlenebilen veya birden çok aracı tarafından özel olarak paylaşılmayan paylaşılan zamanlanmış bir mutex türü. |
shared_lock Sınıfı | Zamanlanmış kilit işlemlerini ve birden çok aracı tarafından özel olmayan paylaşımı desteklemek için paylaşılan bir mutex sarmalayan bir sınıf şablonu. |
İşlevler | Açıklama |
---|---|
değiş tokuş etmek | İşlev parametreleri tarafından başvurulan paylaşılan mutex nesnelerinin içeriğini değiştirir. |
Sözdizimi
namespace std {
class shared_mutex;
class shared_timed_mutex;
template <class Mutex>
class shared_lock;
template <class Mutex>
void swap(shared_lock<Mutex>& x, shared_lock<Mutex>& y) noexcept;
}
Açıklamalar
sınıfının shared_mutex
bir örneği, bir kapsam içindeki bir mutex'in paylaşılan sahipliğini denetleyan bir tür olan paylaşılan bir mutex türüdür. Paylaşılan bir mutex türü, bir mutex türünün tüm gereksinimlerini ve paylaşılan özel olmayan sahipliği desteklemek için üyeleri karşılar.
Paylaşılan bir mutex türü , unlock_shared
ve try_lock_shared
ek yöntemlerini lock_shared
destekler:
yöntemi,
lock_shared
iş parçacığı mutex'in paylaşılan sahipliğini elde edene kadar çağıran iş parçacığını engeller.yöntemi,
unlock_shared
çağıran iş parçacığı tarafından tutulan mutex'in paylaşılan sahipliğini serbest bırakır.yöntemi,
try_lock_shared
engelleme olmadan mutex'in paylaşılan sahipliğini almaya çalışır. Dönüş türü olarakbool
dönüştürülebilir vetrue
yöntemin sahiplik elde edip etmemesidir, ancak tersidirfalse
.
sınıfı shared_timed_mutex
, hem paylaşılan bir mutex türünün hem de zamanlanmış bir mutex türünün gereksinimlerini karşılayan bir tür olan paylaşılan bir zamanlanmış mutex türüdür.
Paylaşılan zamanlanmış mutex türü ek yöntemleri try_lock_shared_for
ve try_lock_shared_until
destekler:
yöntemi,
try_lock_shared_for
parametresi tarafından belirtilen süre geçene kadar mutex'in paylaşılan sahipliğini almayı dener. Süre pozitif değilse, yöntemi iletry_lock_shared
eşdeğerdir. Yöntem, paylaşılan sahiplik alınmadığı sürece belirtilen süre içinde döndürülmüyor. Dönüş değeri,true
yöntemin sahiplik elde ettiği, ancak aksi durumdafalse
olduğudur.yöntemi,
try_lock_shared_until
belirtilen mutlak süre geçene kadar mutex'in paylaşılan sahipliğini elde etmeye çalışır. Belirtilen süre zaten geçtiyse, yöntemi iletry_lock_shared
eşdeğerdir. Yöntem, paylaşılan sahiplik alınmadığı sürece belirtilen süreden önce döndürülmüyor. Dönüş değeri,true
yöntemin sahiplik elde ettiği, ancak aksi durumdafalse
olduğudur.
shared_lock
Sınıf şablonu, zamanlanmış kilitleme ve sahipliğin paylaşılan bir mutex'e aktarılması desteğini genişletir. Muteksin sahipliği, inşaat sırasında veya sonrasında elde edilebilir ve başka bir shared_lock
nesneye aktarılabilir. Türdeki shared_lock
nesneler taşınabilir, ancak kopyalanamaz.
Uyarı
Visual Studio 2015'den başlayarak, C++ Standart Kitaplığı eşitleme türleri Windows eşitleme temellerini temel alır ve artık ConcRT kullanmaz (hedef platform Windows XP hariç). içinde <shared_mutex>
tanımlanan türler concRT türleri veya işlevleri ile kullanılmamalıdır.
Sınıflar
shared_mutex Sınıfı
Sınıfı shared_mutex
, paylaşılan sahiplik semantiğine sahip özyinelemeli olmayan bir mutex uygular.
class shared_mutex {
public:
shared_mutex();
~shared_mutex();
shared_mutex(const shared_mutex&) = delete;
shared_mutex& operator=(const shared_mutex&) = delete;
// Exclusive ownership
void lock();
// blocking
bool try_lock();
void unlock();
// Shared ownership
void lock_shared();
// blocking
bool try_lock_shared();
void unlock_shared();
// Getters
typedef void** native_handle_type; // implementation defined
native_handle_type native_handle();
};
shared_timed_mutex Sınıfı
Sınıfı shared_timed_mutex
, zamanlanmış bir mutex türünün gereksinimlerini karşılayan paylaşılan sahiplik semantiğine sahip özyinelemeli olmayan bir mutex uygular.
class shared_timed_mutex {
public:
shared_timed_mutex();
~shared_timed_mutex();
shared_timed_mutex(const shared_timed_mutex&) = delete;
shared_timed_mutex& operator=(const shared_timed_mutex&) = delete;
// Exclusive ownership
void lock();
// blocking
bool try_lock();
template <class Rep, class Period>
bool try_lock_for(const chrono::duration<Rep, Period>& rel_time);
template <class Clock, class Duration>
bool try_lock_until(const chrono::time_point<Clock, Duration>& abs_time);
void unlock();
// Shared ownership
void lock_shared();
// blocking
bool try_lock_shared();
template <class Rep, class Period>
bool try_lock_shared_for(const chrono::duration<Rep, Period>& rel_time);
template <class Clock, class Duration>
bool try_lock_shared_until(const chrono::time_point<Clock, Duration>& abs_time);
void unlock_shared();
};
shared_lock Sınıfı
Sınıf şablonu shared_lock
, bir kapsam içindeki paylaşılan bir mutex nesnesinin paylaşılan sahipliğini denetler. Şablon parametresi paylaşılan bir mutex türü olmalıdır.
class shared_lock {
public:
typedef Mutex mutex_type;
shared_lock() noexcept;
explicit shared_lock(mutex_type& m);
// blocking
shared_lock(mutex_type& m, defer_lock_t) noexcept;
shared_lock(mutex_type& m, try_to_lock_t);
shared_lock(mutex_type& m, adopt_lock_t);
template <class Clock, class Duration>
shared_lock(mutex_type& m,
const chrono::time_point<Clock, Duration>& abs_time);
template <class Rep, class Period>
shared_lock(mutex_type& m,
const chrono::duration<Rep, Period>& rel_time);
~shared_lock();
shared_lock(shared_lock const&) = delete;
shared_lock& operator=(shared_lock const&) = delete;
shared_lock(shared_lock&& u) noexcept;
shared_lock& operator=(shared_lock&& u) noexcept;
void lock();
// blocking
bool try_lock();
template <class Rep, class Period>
bool try_lock_for(const chrono::duration<Rep, Period>& rel_time);
template <class Clock, class Duration>
bool try_lock_until(const chrono::time_point<Clock, Duration>& abs_time);
void unlock();
// Setters
void swap(shared_lock& u) noexcept;
mutex_type* release() noexcept;
// Getters
bool owns_lock() const noexcept;
explicit operator bool () const noexcept;
mutex_type* mutex() const noexcept;
private:
mutex_type* pm; // exposition only
bool owns; // exposition only
};
İşlevler
swap
shared_lock
Nesneleri değiştirir.
template <class Mutex>
void swap(shared_lock<Mutex>& x, shared_lock<Mutex>& y) noexcept;
İki shared_lock
nesnenin içeriğini değiştirir. etkili bir şekilde ile x.swap(y)
aynıdır.
Gereksinimler
Üst Bilgi:<shared_mutex>
Ad alanı: std