Çapraz platform uygulamasında Boost'u kullanmaya başladım, ancak Win32'ın kritik bölümünün veya .Net'in lock
davranışını yeniden oluşturmak için kodu nasıl uygulayabildiğimi anlayamıyorum.Boost ile nasıl kritik bir bölüm oluştururum?
Yazma işlemlerini paylaşılan alanlara denetlemek için farklı iş parçacıklarından çağrılabilen bir yöntem Foo
yazmak istiyorum. Aynı iş parçacığında yinelenen çağrılara izin verilmelidir (Foo() -> Foo()).
C# bu uygulama çok basit:
class test
{
public:
void testMethod()
{
// this section is not locked
{
boost::lock_guard<boost::recursive_mutex> lock(m_guard);
// this section is locked
}
// this section is not locked
}
private:
boost::recursive_mutex m_guard;
};
PS Boost.Thread kütüphanede bulunan bu sınıflar: Eğer boost :: < lock_guard kullanabilirsiniz boost> sınıf ile
object _synch = new object();
void Foo()
{
lock (_synch) // one thread can't be lock by him self, but another threads must wait untill
{
// do some works
if (...)
{
Foo();
}
}
}
Tavsiyeniz çok faydalıdır. Hatamı düzelttim, ama performans baskısı var! 3 kere daha! = ((bu düzeltmeden önce ben unique_lock kullandı) –
Vie
Paylaşılan kaynakları kullanarak kod örnekleri sağlayabilir misiniz? Ayrıca, bu http://home.roadrunner.com/~hinnant/mutexes/locking.html#Shared. faydalı olacaktır –
Yinelemeli kilitlemeyi kullanmaktan kaçınmaya çalışın, muhafazayı dış alana taşıyarak olabilir Tekrarlayan muteksler daha basit ve basit olabilir. – blaze