Trong Linux kernel thực hiện spinlock cho kiến trúc TILE-Gx, có vẻ như họ không phát hành bất kỳ rào cản bộ nhớ khi khóa (chỉ khi mở khóa):rào cản Memory và Linux kernel spinlock trên TILE-Gx
https://github.com/torvalds/linux/blob/master/arch/tile/include/asm/spinlock_64.h Sau đó, tôi không hiểu tại sao các hướng dẫn không thể được sắp xếp lại phía trên khóa, điều này sẽ khiến các lập trình viên tin rằng được thực hiện trong khi giữ khóa, để thực thi trước khi khóa được thực hiện?
kiến trúc khác dường như có ít nhất một rào cản biên dịch: spinlock
ARM có một rào cản bộ nhớ:
https://github.com/torvalds/linux/blob/master/arch/arm/include/asm/spinlock.h
Với bình luận:
A memory barrier is required after we get a lock, and before we release it, because V6 CPUs are assumed to have weakly ordered memory.
Và spinlock x86 của có một rào cản biên dịch:
https://github.com/torvalds/linux/blob/master/arch/x86/include/asm/spinlock.h
Với bình luận:
barrier(); /* make sure nothing creeps before the lock is taken */
Tại sao TILE-Gx khác nhau? Tôi nghĩ rằng mô hình bộ nhớ của nó yếu như mô hình bộ nhớ của ARM. Và tại sao họ thậm chí không có một rào cản biên dịch?
+1 cho nghiên cứu. Tôi không biết TILE, nhưng nếu bạn không nhận được phản hồi ở đây, bạn cũng có thể thử gửi email cho tác giả hoặc danh sách gửi thư của hạt nhân. – Shahbaz