2009-02-05 26 views

Trả lời

11

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ó.

+1

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

1

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)

1

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.

1

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.

3

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

Các vấn đề liên quan