SORU
13 HAZİRAN 2009, CUMARTESİ


Shared_mutex (çoklu/tek yazmak okur) artırmak için örnek?

Bazı verileri okumak için çok iş parçacıklı bir uygulama, sık sık ve bazen veri güncellenir. Hemen bir dışlama tutar erişmek için veri güvenli ama pahalı çünkü ben gibi birden çok iş parçacığı okuyabilir aynı anda ve tek kilit onları ne zaman bir güncelleme gerekli (güncelleme parçacığı olabilir bekleyin diğer konuları bitirmek).

Bu boost::shared_mutex bunu yapmak için ne gerekiyor sanırım, ama nasıl kullanılacağı konusunda emin değilim ve net bir örnek bulamadım.

Herkes başlamak için kullanabileceğim basit bir örnek var mı?

CEVAP
27 Ocak 2011, PERŞEMBE


1800 BİLGİLERİ daha fazla veya daha az doğru, ama düzeltmek istediğim birkaç konu var.

boost::shared_mutex _access;
void reader()
{
  boost::shared_lock< boost::shared_mutex > lock(_access);
  // do work here, without anyone having exclusive access
}

void conditional_writer()
{
  boost::upgrade_lock< boost::shared_mutex > lock(_access);
  // do work here, without anyone having exclusive access

  if (something) {
    boost::upgrade_to_unique_lock< boost::shared_mutex > uniqueLock(lock);
    // do work here, but now you have exclusive access
  }

  // do more work here, without anyone having exclusive access
}

void unconditional_writer()
{
  boost::unique_lock< boost::shared_mutex > lock(_access);
  // do work here, with exclusive access
}

Ayrıca Not, shared_lock, yalnızca tek bir iş parçacığı yükseltilmiş değil mi hatta bir keresinde, bir upgrade_lock edinebilirler onu gördüğümde tuhaf olduğunu düşündüm. Eğer tüm okuyucuların koşullu yazarlar, başka bir çözüm bulmak gerekir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • foreignimage

    foreignimage

    13 HAZİRAN 2006
  • Mega64

    Mega64

    24 ŞUBAT 2006
  • spyib

    spyib

    9 Ocak 2007