2013-02-01 19 views
6

Giả sử tôi có ứng dụng C++ 11 trong đó hai luồng ghi đến vị trí bộ nhớ khác nhau nhưng gần đó, sử dụng các con trỏ đơn giản cho các kiểu nguyên thủy. Tôi có thể chắc chắn rằng cả hai ghi này sẽ kết thúc trong bộ nhớ cuối cùng (có lẽ sau khi cả hai đã đạt đến một boost::barrier), hoặc là có một nguy cơ mà cả hai lõi CPU giữ dòng bộ nhớ cache của riêng mình có chứa dữ liệu đó, và lõi thứ hai đỏ bừng sửa đổi của nó để RAM sẽ ghi đè và hoàn tác sửa đổi được thực hiện bởi lần ghi đầu tiên?Đồng thời ghi vào các vị trí khác nhau trong cùng một dòng bộ nhớ cache

Tôi hy vọng rằng sự kết hợp bộ nhớ cache sẽ đảm bảo điều này cho tôi trong mọi tình huống và trên tất cả các thiết lập phù hợp với mô hình bộ nhớ C++ 11, nhưng tôi muốn chắc chắn.

Trả lời

7

Có các cơ chế kết hợp bộ nhớ cache sẽ xử lý việc này. Điều này được gọi là False sharing và cần tránh bằng cách tách biệt dữ liệu tốt hơn để tăng hiệu suất.

+3

Ví dụ về giao thức kết hợp bộ nhớ cache: [MESI] (http://en.wikipedia.org/wiki/MESI_protocol). –