可能會發生資料競爭,造成資料錯亂.
例子:本來想要的結果n=0,但是執行發現n的值不為0,而且有多種取值.究其原因,是因為多個執行緒之間會發生資料競爭,導致cpu執行緒排程時出現問題,不能夠保證執行緒內執行**的原子操作.我發現string str = "hello";這一句是必要的,不然它就不會出現n不為0的現象.(有待進一步研究)
注意,如果要所有子執行緒執行完畢後,再執行主線程.要有waitformultipleobjects操作.
#include "windows.h
"#include
using
namespace std;const
int threadnum = 50
;int g_num = 0
;dword winapi threadfun(
void *param)
return0;
}int
main()
waitformultipleobjects(threadnum, h, true, infinite); //等待所有的子執行緒執行完畢.
int n =g_num;
cout
<< "n:"
<< n
}
waitformultipleobjects是必須的,一開始忘記了使用這個,導致在entercriticalsection處報錯,猜測是主線程沒有等子執行緒執行完畢就結束了程式.為了驗證猜想,將waitformultipleobjects注釋掉,在子函式中列印,發現確實是這個原因.
加鎖後每次n列印出來的都是0了.
#include "windows.h
"#include
using
namespace
std;
const
int threadnum = 50
;critical_section g_cs;
int g_num = 0
;dword winapi threadfun(
void *param)
return0;
}int
main()
waitformultipleobjects(threadnum, h, true, infinite);
//等待所有的子執行緒執行完畢.
int n =g_num;
cout
<< "n:"
<< n
return0;
}
為什麼要對版權進行保護?
對版權進行保護其實也就是我們知道的對著作權進行保護,在法律上對著作權的保護是比較全面的。要是有人侵犯他人的著作權的話,則就要按照規定,承擔相應的責任,那麼你知道為什麼要保護版權嗎?一 我國民事立法的基本原則,維護了公民正當的民事權益,完善了我國智財權的法律制度。版權保 的實施,標誌著文學藝術領域無法...
為什麼要對DLL進行簽名
曾經在乙個專案中,要求您為dll建立乙個強名稱,並且為乙個專案建立乙個強名稱,然後編譯專案解決方案開始出現奇怪的編譯錯誤。我去過很多次。面對這些問題時,我有些疑問浮出水面。讓我們仔細閱讀以下基礎知識。我們將調查以下內容 組裝 加密 雜湊 數字簽名assembly assembly是用於部署,安全性和...
為什麼要對訊號進行調頻
一般無線裝置的待發射訊號都是低頻的,如果直接用天線發射這種低頻訊號,根據公式 波長 光速 頻率 計算出的天線長度會非常長,可能是2m,可能是十幾公尺,也有可能是將近百公尺,試想一下,你手機的天線 路由器的天線有幾公尺長會是什麼樣子的,太滑稽了。而2.4g訊號和5g訊號需要d天線長度在幾厘公尺到十幾厘...