一直在考慮vc6自帶的stl和他自己的容器類是不是執行緒安全的,安全到我拿多個執行緒,這邊寫那邊讀,這邊寫那邊寫都可以不考慮會不會出現race condition,我測了幾把竟然都能得到正確的結果,鬱悶~,終於發現了一篇文字如下:
在所有的主流
stl實現方案中,幾乎所有的容器都是執行緒安全的
:1).
乙個執行緒讀寫乙個例項時,另乙個執行緒可以讀寫另乙個例項。
2).多個執行緒可以在同時讀同乙個
container
。3).
多個執行緒寫同乙個
container
時,你應該負責安排互斥性操作。
乙個特例是
std::string
。在一些
stl的實現廠商(包括
ms vc6
),使用的是帶引用計數的
string!
這就意味著可能有兩個
std::string
的例項共享著同一塊底層資料。這使得前面說的第乙個規則被打破
!看一下這樣的**:
string s1= 「abcd」;
string s2 = s1;
在引用計數的實現版本中,這幾句話意味著:先分配一塊記憶體給
」abcd」
,乙個引用計數的數;s1和
s2都將引用這塊記憶體,引用計數將為
2。引用計數的本意是在把
strings
傳出functions
時優化copy
行為。但是這種演算法並不是執行緒安全的
!如果你將
s2傳給另乙個執行緒,那麼就很可能有兩個執行緒企圖修改這同一塊記憶體
!那將會有不可預料的行為發生。
理論上,你可以在兩個執行緒之間增加執行緒同步,但是這個同步的代價將會大於你從引用計數中獲得的好處
!這就是為什麼主流的
stl廠商不再使用引用計數的原因。比如,
dinkumware stl shipped with vc7
。看來還完全是執行緒安全的,look第三條,還是要你自己拿自己的同步物件來鎖下~:),雖然我找不到可以證明的例子,但還是安全第一,要麼自己寫個list什麼的,要麼就好好鎖一鎖
終於找到了 NuGet 修改包路徑
nuget 是 net 平台下的乙個免費 開源的包管理開發工具。如果 nuget.config 不存在,也可以在 c program files x86 nuget config 目錄下新建乙個 nuget.config,將該資料夾中的 microsoft.visualstudio.offline....
as3中matrix 解釋,終於找到了
看到標題也許非常多數學不好或中學時上課打盹的朋友會感到反感,但放心的是在這裡的matrix已簡化了非常多瑣碎的步驟,也不用大家拿一張紙拼命的做計算。對想製作遊戲的朋友也是必學的路程,所以大致上明白了運用的思路就能說掌控了技巧。在字典中的說明不夠充分讓大家去理解,所以開始還是要重複說明一下。matri...
終於找到了最新的Chemdarw註冊碼
隨著中國人對智財權的保護意識提公升,正版軟體越來越流行,只有一小部分人還在尋找chemdarw破解版。最新的chemdraw 15正式版本已經強勢來襲,在獲取軟體安裝包之後需要有效的註冊碼才能啟用軟體,啟用碼是開啟軟體的鑰匙。但是網際網路上的資訊魚龍混雜,特別是破解版本更容易隱藏安全隱患,那麼該如何...