2012-01-27 14 views
7

Tôi có bộ khóa lắp ráp xchg được thiết lập và kiểm tra không. câu hỏi của tôi là:Chúng ta có cần mfence khi sử dụng xchg

Chúng ta có cần sử dụng hàng rào bộ nhớ (mfence, sfence hoặc lfence) khi sử dụng hướng dẫn xchg?

Edit:

64 nền tảng Bit: với Intel Nehalem

+1

Nền tảng/CPU nào? –

Trả lời

11

Như đã nói trong các câu trả lời khác, tiền tố khóa là ẩn, ở đây, do đó, không có vấn đề gì về cấp độ trình biên dịch. Vấn đề có thể nằm trên cấp độ C (hoặc C++) khi bạn sử dụng nó như là trình biên dịch nội tuyến. Ở đây bạn phải đảm bảo rằng trình biên dịch không sắp xếp lại các hướng dẫn liên quan đến xchg của bạn. Nếu bạn đang sử dụng gcc (hoặc anh em họ), bạn thường sẽ làm điều gì đó như:

__asm__ __volatile__("xchgl %1, %0" 
         : "=r"(ret) 
         : "m"(*point), "0"(ret) 
         : "memory"); 

đó là tuyên bố các hướng dẫn như dễ bay hơi thêm "bộ nhớ" clobber.

+4

+1 cho "bộ nhớ" clobber. –

5

số xchg được đảm bảo để biên dịch thành một cái gì đó, mà sẽ đảm bảo tính thống nhất về mức độ phần cứng.

+0

Tôi đoán downvote đến từ việc sử dụng "biên dịch" thay vì "lắp ráp" hoặc bất cứ điều gì: Bài học kinh nghiệm: Tiếng Ba Lan của tôi. Mặc dù vậy tôi vẫn đứng nội dung. –

+0

Giả sử rằng bạn sử dụng tiền tố LOCK, tất nhiên. –

+8

@Daniel: Theo [this] (http://stackoverflow.com/questions/3144335/on-a-multicore-x86-is-a-lock-necessary-as-a-prefix-to-xchg) the ' tiền tố lock' là ngầm cho 'xchg' và do đó không cần thiết cho x86. – Grizzly

12

Theo Chương 8 Bus Khóa, của Intel 64 và Hướng dẫn sử dụng, Tập IA-32 Kiến trúc phát triển phần mềm của 3A

Mô hình bộ nhớ trật tự ngăn chặn tải và lưu trữ không bị sắp xếp lại với khóa hướng dẫn thực hiện sớm hơn hoặc muộn hơn.

Vì vậy, khóa bị khóa hoạt động như rào cản bộ nhớ và không cần thêm rào cản.

+1

Có, theo mục 8.1.2.2 của sách hướng dẫn đã đề cập, lệnh 'XCHG' luôn bị khóa nếu nó tham chiếu đến bộ nhớ, ngay cả khi không có tiền tố LOCK được chỉ định cho nó. Vì vậy, quy tắc đặt hàng bộ nhớ được đề cập ở trên thực sự nên áp dụng và không cần có thêm rào cản nào. – Eugene

-1

hướng dẫn xchg có tiền tố khóa ẩn theo sách hướng dẫn của Intel.