SORU
11 Aralık 2013, ÇARŞAMBA


::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
11 Aralık 2013, ÇARŞAMBA


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Justin Davis

    Justin Davis

    14 Ocak 2008
  • TWiT Netcast Network

    TWiT Netcast

    27 EKİM 2005
  • Yanko Kral

    Yanko Kral

    8 HAZİRAN 2006