引用:
|
作者littleshan
你看起來沒有了解我的意思,讓我說具體一點好了。
你好像以為spin-lock是硬體技術,但事實上它不過就是個迴圈。
傳統SMP的spin-lock是長這樣
while(1){
while(lock_var);
EAX = 1;
swap(lock_var, EAX);
if(EAX == 0) break;
}
// critical section goes here...
有了monitor/mwait指令後變成這樣
while(1){
while(lock_var){
monitor lock_var;
if(lock_var != 0){
mwait;
}
}
EAX = 1;
swap(lock_var, EAX);
if(EAX == 1) break;
}
// critical section goes here...
雖然你強調「只需要為P4寫一次程式碼就可以直接拿到K8執行」,但就算在P4上,這兩種程式碼還是需要並存,因為前者適用SMP/dual-core,後者適用hyperthreading。而判斷應該使用前者或後者的責任則在OS身上,所謂「開發廠商」並...
|
上面的寫法已經把兩種指令包括在內,若可以使用spin-lock就使用spin-lock
不行就使用monitor/mwait去做相同的工作
似乎Intel寫SSE3時有考慮到這點,那我推翻自己的說法