Nếu tôi có hai quy trình truy cập vào khóa đăng ký đã cho (tắt của HKLM), bạn nên bao gồm logic trong một Mutex?Chủ đề của Win32 Registry có an toàn không?
Trả lời
Sổ đăng ký sẽ đảm bảo các hành động là nguyên tử, do đó bạn không phải tự đồng bộ hóa nó.
Tuy nhiên, nếu bạn có nhiều quy trình/chủ đề truy cập sổ đăng ký cùng một lúc, nó không đảm bảo bất kỳ điều gì xảy ra trước tiên. Chỉ rằng bạn sẽ không nhận được dữ liệu bị cắt xén.
Chỉnh sửa: Đọc thêm, xem The inability to lock someone out of the registry is a feature, not a bug.
Điều đó tùy thuộc vào nội dung bạn đang giao tiếp và thời gian thông tin quan trọng. Ví dụ: giả sử bạn có ứng dụng hoạt động và ghi kết quả trạng thái vào khóa đăng ký và ứng dụng khác đọc trạng thái đó và hiển thị nó trên màn hình. Trong trường hợp đó, tôi sẽ không bận tâm với một mutex, vì người đọc sẽ luôn nhận được một giá trị "có ý nghĩa". Những gì bạn đang hỏi thực sự là một câu hỏi cơ bản về thiết kế đồng thời, tôi nghĩ vậy.
Đọc nhanh bài viết này của Raymond Chen. Nó giải thích rằng cá nhân viết và đọc chống lại đăng ký là nguyên tử. Tuy nhiên, khóa khác là tùy thuộc vào bạn vì bây giờ có cách để giữ một khóa mở độc quyền.
http://blogs.msdn.com/oldnewthing/archive/2009/03/26/9508968.aspx
Windows Server 2008 cũng đã hỗ trợ cho việc truy cập giao dịch để đăng ký. Here's the overview tại MSDN. Và đây là một số blog post thông báo với một số câu hỏi và câu trả lời.
Như những người khác đã đề cập, các hoạt động riêng lẻ là nguyên tử. Nếu bạn cần tạo một tập hợp lớn hơn các hoạt động nguyên tử và bạn đang nhắm mục tiêu đến Vista hoặc tốt hơn, bạn có thể sử dụng hỗ trợ đăng ký giao dịch được thêm vào trong Vista.
Thật không may, không có hỗ trợ được quản lý trực tiếp nên bạn cần tạo trình bao bọc. http://community.bartdesmet.net/blogs/bart/archive/2006/12/14/Windows-Vista-2D00-Introducing-TxR-in-C_2300_-_2800_Part-1_2900_.aspx cho biết cách P/Gọi các phương thức này.
- 1. Chủ đề này có an toàn không?
- 2. Chủ đề NSPersistentStoreCoordinator có an toàn không?
- 3. Chủ đề SecureRandom có an toàn không?
- 4. Chủ đề MSMQ có an toàn không?
- 5. Chủ đề EPiServer có an toàn không?
- 6. Chủ đề DocumentBuilder.parse() có an toàn không?
- 7. Chủ đề console.writeline có an toàn không?
- 8. Chủ đề NSFileManager có an toàn không?
- 9. Chủ đề libuv có an toàn không?
- 10. Chủ đề java.util.Hashtable có an toàn không?
- 11. Cửa sổ Win32 có an toàn không?
- 12. Có LoadLibrary, FreeLibrary và GetModuleHandle Win32 chức năng chủ đề an toàn không?
- 13. Có an toàn cho chủ đề của PHP không?
- 14. Chủ đề PrintWriter của socket Java có an toàn không?
- 15. Là chủ đề của ImmutableList.Builder có an toàn không?
- 16. Chủ đề DataContractSerilaizer của WCF có an toàn không?
- 17. An toàn chủ đề của SocketOutputStream
- 18. Về chủ đề an toàn của servlet
- 19. An toàn chủ đề của JTextArea.append
- 20. Chủ đề an toàn chủ đề - tĩnh hay không?
- 21. Có an toàn để sử dụng các chức năng chủ đề 'Không an toàn' không?
- 22. Chủ đề an toàn có được putStrLn không?
- 23. Chủ đề lớp Joda-Time DateTimeFormatter có an toàn không?
- 24. Chủ đề Java MulticastSocket có an toàn không?
- 25. Trong SignalR là chủ đề Hub.Context có an toàn không?
- 26. Chủ đề phiên Django có an toàn không?
- 27. Delphi - Chủ đề TClientDataset có an toàn không?
- 28. Có phải Azure CloudTable là chủ đề an toàn không?
- 29. Chủ đề chuỗi C# có an toàn không?
- 30. Chủ đề .NET System.Net.CookieContainer có an toàn không?