老少爺們兒反擊戰
上一篇中 我們的女僕終於可以做一些像陽光下其他人一樣的事情了,少爺 們可以和女僕醬一起參加下午茶~ 難得的上流社會啊
這是永遠1v1被人私有的女奴 和 喝茶時被 人共有的女僕醬最明顯的差異~
明媚的午後陽光下,庭院裡白色長餐桌兩旁,英俊的少爺們彼此 交換著最近的趣聞轶事,一面欣賞女僕醬以1/3幾率打翻茶水,可愛而笨笨地努力侍奉著,閃閃發光的樣 子。
人間極樂喵~~~~~~~~~~ :3
但距離真正的自由~~無Lock還是很遠,很遠。
因為,
老爺和少爺的調教仍然是一如既往的頻繁! 女僕醬你仍然是偉大的老少爺們的東西~!
我們看上一次所說的調用聊天室方式:
Code Snippet
Channel cr = session["Chat"];
cr.Say(Request["text"]);
foreach (var s in cr.Listen())
{
Response.write("<p>");
Response.write(s);
Response.write("</p>");
}
這個行程可不得了
女僕來~~ (get instance)
調教~!(Say & writelock)
喝茶~!(Listen & readlock)
所有的少爺和老爺都是這個行程 執事先生,您是惡魔執事 來的吧!(塞巴斯醬邪媚一笑)
雖然效率高了近一倍,但是 在奉茶的時候 仍然有調教的隊伍大排 長龍~
這讓老少爺們很是不 不不爽 ! “主人樣”們是不會這樣滿足地口胡!~ 啊 太激動了,咽 口水先。
--------------------------------------------------------------------------- ----------
最年輕的少爺在某個風和日麗的下午茶時間 提出了一個邪惡點子:
“ 既然我們喝茶的時候只是想看著女僕醬,又不是真的希望她倒茶,為啥我們不能一邊看著別人調教女僕 醬 一邊喝茶呢?”
全體老少爺們的紅茶都化作血霧噴灑在無瑕的桌上,紛紛氣絕。
小少爺解釋道:
既然數據池實際上是一個隊列 而加入隊列僅僅是對隊列頭有所操作,
那麼在已經訪問過的節點另一端加入的內容 對於已經開始訪問內部內容的線程來說是毫無意義 的
為 了“不存在”的變化加鎖,這又是何苦呢?
“囊得斯嘎!? ”
“艘得斯嘎!!”
“游息!!”
爬起來的各位紛 紛恍然大悟裝,激動地握住彼此的手,泛著淚光。。。。
可是為什麼我們之前要加鎖呢?
深入研究Queue<T> 的源代碼 我們了解到 Queue<T>的實現方法:定長數組實現 的循環隊列
不熟悉循環隊列的兄弟們可以參考博友刺兒頭的文章
當每次 ToArray的時候 Queue<T>執行下面的操作
Code Snippet
public T[] ToArray()
{
T[] destinationArray = new T[this._size];
if (this._size != 0)
{
if (this._head < this._tail)
{
Array.Copy(this._array, this._head, destinationArray, 0, this._size);
return destinationArray;
}
Array.Copy(this._array, this._head, destinationArray, 0, this._array.Length - this._head);
Array.Copy(this._array, 0, destinationArray, this._array.Length - this._head, this._tail);
}
return destinationArray;
同時有人Enqueue的時候 _size _head _tail 都可能被並發修改
Code Snippet
public void Enqueue(T item)
{
if (this._size == this._array.Length)
{
int capacity = (int)((this._array.Length * 200L) / 100L);
if (capacity < (this._array.Length + 4))
{
capacity = this._array.Length + 4;
}
this.SetCapacity(capacity);
}
this._array[this._tail] = item;
this._tail = (this._tail + 1) % this._array.Length;
this._size++;
this._version++;
}
太危險了!
我們是為了保障這些關鍵標記量才用的Lock 這是數組內核本身限制造成的:(
我們一開始就陷入了 “要用隊列,M$提供了隊列”的心理陷阱,
——果然觀賞女僕醬一定要喝茶是錯誤的常識
——看來聊天數據 池還真的不能拿來主義
對於微軟類庫做不到的 我們一定要有自己的實現。 所以女僕醬啊,你的 末日到了歐歐歐歐喝喝喝喝喝喝HiaHiaHia …..
敬請期待下一篇:
垃圾列表