2009-05-18 13 views
9

Windows ortamında, WinAPI'nin kritik bölümlerini veya başka bir şeyi kullanarak Boost'un kapsamlı mutex'i mi var?Boost's scoped mutex ve WinAPi'nin kritik bölümü arasında bir fark var mı?

+0

Boost kaynak kodunu incelemediniz, değil mi? :) – OregonGhost

+2

Erişim hakkına sahip olmadığım bir yerdeyim :( – nhaa123

+7

Hem Stack Overflow hem de Boost kaynaklarının İnternet erişimine sahip olmanız gerekiyor http://svn.boost.org/svn/boost/trunk/ – ognian

cevap

19

Geçerli sürüm boost::mutex ne Win32 CRITICAL_SECTION ne de bir Win32 Mutex kullanır. Bunun yerine, atomik işlemleri ve beklemeleri engellemek için bir Win32 Olayı kullanır.

Eski sürümler (1.34.1 ve önceki sürümleri), Windows'ta CRITICAL_SECTION civarında bir paketleyiciydi.

Bu arada, muteksin kendisi kapsam dışı değildir. boost::mutex::scoped_lock türünde ve son sürümlerde, boost::lock_guard<boost::mutex> ve boost::unique_lock<boost::mutex> RAII paketleyicileri, kilidini açmayı unutmadığınızdan emin olmak için bir muteks kilitleme sağlar.

boost::lock_guard<> ve boost::unique_lock<> şablonları lock() ve unlock() üye fonksiyonları ile herhangi bir tür ile çalışmak, böylece istenirse şu işlemler arası muteksler ile kullanabilirsiniz.

+0

Cevabınız için teşekkür ederiz. – nhaa123

+0

Bu muhtemelen bir Win32 Kritik Bölümü kadar verimli/neredeyse kadar mı? – unixman83

+0

@ unixman83: Şüpheliyim, kritik bir bölüm hızlıdır çünkü süreç içi olduğu için süreçler arasında kullanamazsınız. Bu bir çekirdek nesnesi değil, ancak Win32 Olayları. Bu yüzden bir CS kadar hızlı olmadığını varsayabilirim. – gbjbaanb

1

Win32'un CRITICAL_SECTION öğesi yalnızca tek bir işlemin tek bir işleminde kullanılabilir. İşlemler arasında bir şey kullanmanız gerekiyorsa, bir muteks'e ihtiyacınız var. Boost kritik bölümler hakkında hiçbir şey söylemiyor, bu yüzden muteksleri kullandığını farz ediyorum.

"Kapsamlı", yalnızca belirli bir kapsamın sonunda muteksin otomatik olarak açılması için RAII kullanan bir sarıcıya sahip olduğu anlamına gelir.

+0

Evet, Bildiğim bu Hmm, sanırım asıl kaynağa daha sonra bakmam gerekiyor .. – nhaa123

+0

Eğer buna "muteks" diyorlarsa ve "kritik bölüm" ifadesini çok yüksek bir olasılıkla varsayalım, bu kritik değil –

+0

Hah, iyi düşünülmüş :) – nhaa123