2012-06-08 37 views
5

Tôi hiện đang sử dụng OpenMP để viết mã chạy trên các nút đa lõi. openMP có một mô hình bộ nhớ cụ thể đảm bảo rằng bộ nhớ được đồng bộ giữa các luồng chạy trên các lõi khác nhau khi khóa được mua lại.Có `std :: mutex` và` std :: lock` đảm bảo bộ nhớ đồng bộ hóa trong mã bộ xử lý liên không?

Tôi xem xét sử dụng cấu trúc C++ 11 (std::thread với std::mutexstd::lock) thay vì openMP (vì tính linh hoạt lớn hơn) và tự hỏi liệu bộ nhớ đồng bộ hóa giữa các bộ xử lý có được đảm bảo ở đây không? Và nếu không, làm thế nào tôi có thể thực thi nó?

+1

Câu hỏi của bạn là một chút không rõ ràng. Nó gần giống như yêu cầu của bạn làm thế nào để làm lập trình đa luồng. –

+0

Một số đồng bộ hóa được đảm bảo, một số đồng bộ không được bảo đảm. Câu hỏi này thực sự mơ hồ. – jpalecek

+1

Bạn có nghĩa là đồng bộ hóa bộ nhớ của chính 'mutex' hoặc truy cập dữ liệu trong mã được bảo vệ bởi mutex không? – KillianDS

Trả lời

9

Tiêu chuẩn làm cho người nhận bảo lãnh sau đây về đồng bộ hóa std::mutex, trong §30.4.1.2 [thread.mutex.requirements.mutex]/6-25

Khái niệm m.lock() sẽ nổi được hình thành và có các ngữ nghĩa sau đây

Đồng bộ hóa: Các hoạt động mở khóa trước() trên cùng một đối tượng sẽ đồng bộ hóa với thao tác này.

Và, tương tự như vậy,

Khái niệm m.unlock() được tốt được hình thành và có ngữ nghĩa sau

Synchronization: Thao tác này sẽ đồng bộ với các hoạt động khóa sau đó lấy quyền sở hữu trên cùng một đối tượng.

(Trong trường hợp "đồng bộ hóa với" là một thuật ngữ cụ thể được giải thích trong $ 1.10, mặc dù nó dễ dàng hơn để hiểu bằng cách đọc C++ Concurrency Trong Action)

+1

Điều này gợi ý rằng sự hiện diện (hoặc vắng mặt) của nhiều bộ vi xử lý không quan trọng ... Việc thực hiện để thực thi những bảo đảm này là không quan trọng. –

+0

bạn có thể giới thiệu tôi đến một tài nguyên web giải thích những gì "đồng bộ hóa với" không. Điều này ngụ ý sự kết hợp bộ nhớ cache trên một nút đa lõi? – Walter

+3

@Walter trong ngắn gọn, nó có nghĩa là mỗi cửa hàng được thực hiện bởi các chủ đề mà phát hành mutex trở nên có thể nhìn thấy các chủ đề mà có được mutex, nhưng không để thread khác. Nó ngụ ý một rào cản phát hành và một rào cản có được, hoặc tương đương của chúng. – Cubbi

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