::unique_lock&std lt;std::dışlama> std::lock_guard<std::dışlama>?
İki kullanım örnekleri var.
A. bir sıraya iki iş parçacıkları tarafından erişimi eşitlemek istiyorum.
B. sıra iki iş parçacıkları tarafından erişimi eşitlemek istiyorum ve iş parçacığı içeriği hakkında başka bir iş parçacığı tarafından kuyruğuna saklı olmasını bekler çünkü bir koşul değişkeni kullanın.
Kullanım örneği için Bir örnek std::lock_guard<>
kullanarak kod bakın. B harf için örnek std::unique_lock<>
kullanarak kod görüyorum.
İkisi arasındaki fark nedir ve hangi durumda kullanmak hangi kullanmalıyım?
CEVAP
Fark kilitleyebilirsiniz ve std::unique_lock
kilidini. std::lock_guard
sadece inşaat üzerine bir kez kilitli olacak ve yıkım kilidi.
Usecase için B kesinlikle std::unique_lock
koşul için bir değişken gerekiyor. Durumda Bir bekçi kilitle ihtiyacınız olup olmadığını bağlıdır.
Bu örneğin izin std::unique_lock
diğer özelliklere sahiptir: hemen dışlama kilitleme ama DEMİRYOLU inşa etmek için sarıcı (here) olmadan inşa edilmiştir.
Gardiyanlar sadece sınırlı bir kapsamı, örneğin sabahlık gerektiğinde kullanılabilir kilit: bir üye fonksiyon:
void member_foo() {
std::lock_guard<mutex_type> lock(this->my_mutex);
...
}
Chmike bir soru açıklığa kavuşturmak için, varsayılan olarak std::lock_guard
std::unique_lock
aynıdır.
Yukarıdaki durumda, std::unique_lock
10 *değiştirin. Ancak, std::unique_lock
biraz daha fazla yük olabilir.
Ne zaman bir dışlama yerine bir sayaç ...
Java dışlama ve semafor nedir ? Temel ...
pthreads dışlama vs semafor...
::unique_lock boost vs boost::lock_gua...
C Küresel bir Dışlama kullanarak güzel...