4種lock的實現:
每乙個lock帶有乙個狀態位,lock()與unlock()操作原子的改變狀態位。
false時可進入,true時spin。
public
class
taslock
implements
lock
}public
void
unlock
()}
defect:
taslock演算法的改進。
public class ttaslock implements lock();
if (! state.getandset(true))
return;}}
public
void
unlock
()}
while (state.get()){}
是乙個改進,效果是先看一眼lock的狀態,當lock是false時,
再真正的執行state.getandset(true)
。
當state.getandset(true) 的return為false時,說明之前的確是false,於是獲得鎖,return。
否則回到while(true),再次嘗試獲得鎖。
defect:佇列鎖。
clhlock
void
initclhlock
()void
lock()}
void
unlock
()
note:public
class
mcslock
implements
lock};}
...class
qnode
}
public
void
lock
()//將自己設為true然後spin,看似deadlock
}}public
void
unlock
() }
//右面有等待執行緒,則通知後面的執行緒
qnode.next.locked = false;
qnode.next = null;
}
note: linux 讀寫鎖的幾種實現方式
一 使用互斥鎖和條件變數實現讀寫鎖 cpp view plain copy class readwrite lock void readlock void readunlock void writelock void writeunlock private mutex mtx condition v...
幾種排序演算法的實現
對陣列int a n 進行直接插入排序 void insertsort int a,int n r j 1 temp 完成下標為i的元素的排序 對陣列a n 進行折半插入排序 void insertsort int a,int n 折半查詢結束 移動元素 for j i j high 1 j a j...
幾種排序演算法的實現
氣泡排序演算法 param mutablearray 需要排序的陣列 選擇排序演算法 param mutablearray 需要排序的陣列 void selectionsortarray nsmutablearray mutablearray 3.快速排序演算法 oc 快速排序演算法 param a...