Giả sử rằng biến không có nguy cơ bị sửa đổi trong lần đọc, có bất kỳ vấn đề cố hữu nào trong một biến được đọc bởi 2 hoặc nhiều luồng cùng một lúc không?là lần đọc đồng thời của một chuỗi an toàn có thể thay đổi?
Trả lời
Nếu giả định của bạn được giữ, thì không có vấn đề gì.
Do cơ sở dữ liệu thường có thể sử dụng shared read locks, trong đó bất kỳ số lượng khách hàng nào có thể đọc cùng một khối, tôi sẽ đề xuất rằng không có vấn đề cố hữu trực tiếp.
Có ba ký tự.
Chỉnh sửa: Rất tiếc. Có, đó là chủ đề an toàn. Không, không có vấn đề gì cả. Mọi người thường hỏi nếu có gì đó an toàn chỉ, không phải là chuỗi không an toàn.
Miễn là nó là một biến đơn giản, không có rủi ro.
Nếu đó là tài sản, việc đọc sách có thể có tác dụng phụ, vì vậy không được bảo đảm là chuỗi an toàn.
Không hoạt động này không phải là chủ đề an toàn.
Mặc dù biến hiện không được ghi vào, ghi trước đó cho biến có thể chưa hiển thị cho tất cả chuỗi. Điều này có nghĩa là hai luồng có thể đọc cùng một giá trị và nhận được các kết quả khác nhau tạo ra một điều kiện chủng tộc.
Điều này có thể được ngăn chặn mặc dù các rào cản bộ nhớ, sử dụng chính xác dễ bay hơi hoặc một vài cơ chế khác. Chúng tôi cần biết thêm về môi trường của bạn, đặc biệt là ngôn ngữ, để đưa ra một lời giải thích đầy đủ.
Một chút nghỉ ngơi của câu hỏi của bạn mặc dù mang lại một câu trả lời tốt hơn. Giả sử không có viết nhiều hơn và tất cả các ghi trước đó được hiển thị cho luồng hiện tại, thì có đọc giá trị từ nhiều luồng là an toàn.
Câu trả lời hay mặc dù việc sử dụng dễ bay hơi thực sự phụ thuộc vào ngôn ngữ. Trong c/C++, volatile là một người bạn giả xác định vì mã được tạo ra rất chuyên biệt về trình biên dịch và không có tiêu chuẩn nào để nói biến biến động nào thực sự làm – zebrabox
@zebrabox, rất đúng. Tôi đã cố gắng cẩn thận với câu trả lời vì nó cực kỳ ngôn ngữ + nền tảng cụ thể. – JaredPar
- 1. Có phải đọc đồng thời từ một chuỗi an toàn không?
- 2. Truy cập đọc đồng thời trên một mảng int []: Có an toàn không? Có nhanh không?
- 3. Chuyển đổi một cách an toàn giá trị trong bản đồ có thể thay đổi
- 4. Chuỗi an toàn của Netty Channel.write có an toàn không?
- 5. Độ an toàn của chuỗi quá nhiều?
- 6. Hàng đợi ưu tiên có thể thay đổi đồng thời
- 7. Có một thuật toán cho bỏ phiếu ẩn danh, có thể thay đổi, an toàn không?
- 8. là chuỗi java.util.UUID có an toàn không?
- 9. Là chuỗi String.intern() an toàn
- 10. Cách đánh dấu một hội đồng .net là an toàn?
- 11. Đồng thời cơ sở dữ liệu an toàn trong ROR
- 12. Phương pháp an toàn để cập nhật gói R - là "trao đổi nóng" có thể?
- 13. Có bao nhiêu người đọc đồng thời một pthread_rwlock có?
- 14. là + = trong chuỗi python có an toàn không?
- 15. Có an toàn để thay đổi thành DOCTYPE HTML5 không?
- 16. Chủ đề của bảng Guava có an toàn khi bản đồ sao lưu của nó là an toàn không?
- 17. java.lang.Thread có phải là một lớp an toàn không?
- 18. Có phải chuỗi được tạo ra Axis2 an toàn không?
- 19. Cấu hình Devise an toàn nhất có thể là gì?
- 20. an toàn thread unordered_map
- 21. Perl thay thế nhiều chuỗi đồng thời
- 22. Có an toàn để đọc từ nhiều luồng không?
- 23. Java đồng thời - tại sao không đồng bộ hóa một setter (nhưng không phải là một getter) làm cho một lớp thread-an toàn?
- 24. Chuỗi NSUserDefault có an toàn không?
- 25. Có phải chuỗi an toàn của SQLite.Net không?
- 26. Có an toàn khi kết nối NetworkStream với BufferedStream để đọc không đồng bộ không?
- 27. Có phải là an toàn thread inet_aton của Perl không?
- 28. Đọc đồng thời một Tệp (java preffered)
- 29. Làm thế nào tôi có thể chuyển đổi một mảng an toàn thành chuỗi và quay lại một cách an toàn?
- 30. Chuỗi RNGCryptoServiceProvider.GetBytes có an toàn không?
Không phải là vấn đề để tìm hiểu xem giả định của anh có được không? (có thể không, xem câu trả lời của guffa: http://stackoverflow.com/questions/3033425/are-simultaneous-reads-of-a-variable-thread-safe/3033439#3033439) – Kris
Mặc dù hiện tại không có viết , một quyền trước đó có thể chưa được hiển thị cho tất cả các chuỗi tạo điều kiện chủng tộc. Xem câu trả lời của tôi để biết thêm chi tiết. – JaredPar
@Kris, @JaredPar: Đúng, nhưng tôi trả lời câu hỏi của OP như đã nêu. :-) –