Tôi có một chủ đề push-ủng hộ cho danh sách STL và một chủ đề pop-fronting từ danh sách. Tôi có cần khóa danh sách với mutex trong trường hợp này không?Tôi có cần khóa danh sách STL với mutex trong kịch bản push_back pop_front không?
Trả lời
Từ SGI's STL on Thread Safety:
Nếu nhiều đề truy cập vào một container duy nhất, và ít nhất một thread có thể có khả năng viết, sau đó người sử dụng có trách nhiệm đảm bảo loại trừ lẫn nhau giữa các chủ đề trong container truy cập.
Vì cả hai chủ đề của bạn đều sửa đổi danh sách, tôi đoán bạn phải khóa nó.
Có thể. Các hoạt động này không đơn giản, đủ để trở thành nguyên tử, vì vậy chúng sẽ chỉ an toàn cho luồng nếu việc triển khai thực hiện một cách rõ ràng khóa cần thiết.
Tuy nhiên, tiêu chuẩn C++ không xác định xem các thao tác này có nên an toàn theo luồng hay không, do đó, tùy thuộc vào việc triển khai cá nhân để quyết định điều đó. Kiểm tra tài liệu. (Hoặc cho chúng tôi biết bạn đang sử dụng triển khai nào)
Không có gì đảm bảo rằng việc triển khai STL an toàn cho luồng và vì hiệu suất chi phí tôi đoán là không hiệu quả nhất. Bạn chắc chắn nên sử dụng một mutex.
Kể từ khi các hoạt động pop/push stl là AFAIK phi nguyên tử, bạn phải sử dụng một mutex.
Hầu hết các triển khai STL đều là chủ đề an toàn trong cảm giác bạn có thể truy cập một số trường hợp của loại danh sách từ một số chủ đề mà không cần khóa. Nhưng bạn PHẢI khóa khi bạn đang truy cập cùng một phiên bản danh sách của bạn.
Có một cái nhìn về vấn đề này để biết thêm thông tin: STL thread safty in sgi stl
- 1. std :: danh sách luồng push_back, trước, pop_front
- 2. C++ STL Vector: push_back dùng tham khảo
- 3. Làm cách nào để khóa một mutex trong danh sách bộ khởi tạo?
- 4. Tôi có cần một mutex để đọc không?
- 5. Chủ đề bị lỗi với khóa Mutex
- 6. Tôi có nên vứt bỏ Mutex không?
- 7. Có cơ chế mutex/semaphore nào trong các kịch bản lệnh shell không?
- 8. Tôi nên sử dụng container STL nào cho FIFO?
- 9. Move với vector :: push_back
- 10. Tôi có cần khóa ở đây không?
- 11. STL có rỗng() threadsafe không?
- 12. Tôi có thể "chuyển đổi" danh sách bản đồ thành bản đồ danh sách trong Clojure không?
- 13. Tôi có thể sử dụng Danh sách các đối tượng làm Khóa Từ Điển không?
- 14. Mở khóa Mutex không thành công lạ
- 15. Tôi có nên giữ danh sách việc cần làm trong điều khiển nguồn không?
- 16. Powershell kịch bản để xóa các tập tin không được xác định trong một danh sách
- 17. Tôi có thể tạo danh sách việc cần làm toàn cầu trong doxygen không?
- 18. Cách tìm kiếm phần tử trong danh sách stl?
- 19. Move danh sách phần tử vào cuối trong STL
- 20. Bản đồ STL trên bản thân?
- 21. Khóa mutex phân cấp trong Java
- 22. Khóa bảo mật trong kịch bản Ứng dụng iOS, có an toàn không?
- 23. Sử dụng nhiều khóa mutex
- 24. Kịch bản này có an toàn không?
- 25. Tôi có cần sử dụng khóa với số nguyên trong chuỗi C++
- 26. Có thể lấy danh sách từ khóa bằng Python không?
- 27. Tôi có nên kiểm tra kỹ trước và sau khi khóa danh sách không?
- 28. Biến thể khóa mutex nào tôi nên sử dụng trong hạt nhân Linux đang phát triển?
- 29. Khóa một mutex trong một destructor trong C++ 11
- 30. danh sách đoàn với bản sao
SGI là không giống như các thư viện chuẩn STL-cũng như thực hiện trong C++. Sau này không nói gì về đồng thời hoặc luồng. (Có một số khác biệt khác là tốt, mặc dù đây không phải là có liên quan ở đây). Nhưng trong ngắn hạn, bạn không thể giả định rằng những gì SGI nói sẽ áp dụng cho stdlib – jalf