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.
- 1. Czy bezpieczny wątek String.intern()
- 2. Czy wątek libuv jest bezpieczny?
- 3. Czy bezpieczny wątek SecureRandom jest bezpieczny?
- 4. Czy wątek console.writeline jest bezpieczny?
- 5. Czy wątek Joiner jest bezpieczny?
- 6. Czy wątek RNGCryptoServiceProvider.GetBytes jest bezpieczny?
- 7. Czy wątek NSFileManager jest bezpieczny?
- 8. Czy C# "??" Czy wątek operatora jest bezpieczny?
- 9. Czy wątek java.util.Calendar jest bezpieczny czy nie?
- 10. BroadcastReceiver onReceive() wątek bezpieczny?
- 11. Wątek bezpieczny stos C++
- 12. jest bezpieczny wątek DatagramSocket.send?
- 13. Bezpieczny wątek unique_ptr move
- 14. java.text.SimpleDateFormat nie wątek bezpieczny
- 15. Czy wątek armadillo solve() jest bezpieczny?
- 16. Czy wątek trojański (? :) wątek jest bezpieczny w C#?
- 17. HtmlUnit: jeden WebClient na wątek - czy wątek jest bezpieczny?
- 18. Czy ten wątek klasy Java jest bezpieczny?
- 19. Czy wątek jest bezpieczny dla wątków SLF4J?
- 20. Czy wątek TelemetryClient Application Insight jest bezpieczny?
- 21. Czy wątek protobuf-net jest bezpieczny?
- 22. Delphi - czy wątek TClientDataset jest bezpieczny?
- 23. Czy wątek TADOConnection Delphi jest bezpieczny?
- 24. .NET - Czy wątek metody Queue.Enqueue jest bezpieczny?
- 25. Czy wątek Netty Channel.write jest bezpieczny?
- 26. Czy ten wątek pomocniczy html jest bezpieczny?
- 27. Czy ten wątek użycia blokady jest bezpieczny?
- 28. Czy wątek CertificateFactory.getInstance ("x.509") jest bezpieczny?
- 29. Wątek bezpieczny Singletons w Javie
- 30. Log4Net FileAppender nie wątek bezpieczny?