static inline void barrier(void)
{
asm volatile("": : : "memory");
}
格式 : __asm__(組合語言:輸出:輸入:修飾詞")__volatile__ 代表這行指令(這些組合語言),不和前面的指令一起最佳化。
"memory" 告訴GCC這些組合語言會改變所有的RAM的資料。
因為沒組合語言,又告訴gcc所有RAM的內容都改變,所以這個memory barrier的效用,會讓這行之前被gcc所cache到暫存器的資料通通寫回RAM裡面,也告訴gcc會讓之後讀取RAM的資料,必須再從RAM裡讀取出來。
取自
http://october388.blogspot.com/2008/12/memory-barrier.html
沒有留言:
張貼留言