Jeśli mam dwa procesy uzyskujące dostęp do danego klucza rejestru (poza HKLM), czy dobrze jest opakować logikę w Mutex?Czy program Win32 rejestruje wątek bezpieczny?
Odpowiedz
Rejestr upewni się, że akcje są atomowe, więc nie trzeba ich synchronizować samodzielnie.
Jednakże, jeśli masz wiele procesów/wątków uzyskujących dostęp do rejestru w tym samym czasie, nie ma żadnych gwarancji, co stanie się w pierwszej kolejności. Tyle tylko, że nie dostaniesz zniekształconych danych.
Edytuj: Dalsze czytanie, patrz The inability to lock someone out of the registry is a feature, not a bug.
To zależy od tego, co komunikujesz i od tego, jak ważne są te informacje. Załóżmy na przykład, że masz aplikację wykonującą pracę i zapisującą wyniki stanu do klucza rejestru, a inna aplikacja odczytuje ten status i wyświetla go na ekranie. W takim przypadku nie zawracałbym sobie głowy muteksem, ponieważ czytelnik zawsze otrzyma wartość, która "ma sens". To, o co pytasz, jest naprawdę fundamentalnym zagadnieniem projektowania współbieżności.
Zapoznaj się szybko z tym artykułem Raymonda Chen. Wyjaśnia, że poszczególne zapisy i odczyty rejestru są atomowe. Jednak inne blokowanie należy do ciebie, ponieważ istnieje sposób na trzymanie klucza wyłącznie otwartego.
http://blogs.msdn.com/oldnewthing/archive/2009/03/26/9508968.aspx
Windows Server 2008 posiada również wsparcie dla transakcyjnego dostępu do rejestru. Here's the overview na MSDN. A oto blog post ogłaszając to z kilkoma pytaniami i odpowiedziami.
Jak wspomnieli inni, poszczególne operacje są atomowe. Jeśli potrzebujesz większego zestawu operacji atomowych i kierujesz się na system Vista lub lepszy, możesz skorzystać z obsługi rejestru transakcyjnego dodanej w systemie Vista.
Niestety, nie ma bezpośredniego zarządzania, więc trzeba tworzyć opakowania. http://community.bartdesmet.net/blogs/bart/archive/2006/12/14/Windows-Vista-2D00-Introducing-TxR-in-C_2300_-_2800_Part-1_2900_.aspx pokazuje, jak P/wywołać te metody.