![]() 轉載自: http://www.cnblogs.com/haippy/p/3235560.html http://www.cnblogs.com/lidabo/p/3908705.html 與 C++11 多線程相關的頭文件 我們通常希望一次啟動多個線程,來并行工作。為此,我們可以創(chuàng)建線程組,而不是在先前的舉例中那樣創(chuàng)建一條線程。下面的例子中,主函數(shù)創(chuàng)建十條為一組的線程,并且等待這些線程完成他們的任務 記住,主函數(shù)也是一條線程,通常叫做主線程,所以上面的代碼實際上有11條線程在運行。在啟動這些線程組之后,線程組和主函數(shù)進行協(xié)同(join)之前,允許我們在主線程中做些其他的事情。 demo3:在線程中使用帶有形參的函數(shù) 運行結果: 能看到上面的結果中,程序一旦創(chuàng)建一條線程,其運行存在先后秩序不確定的現(xiàn)象。程序員的任務就是要確保這組線程在訪問公共數(shù)據(jù)時不要出現(xiàn)阻塞。最后幾行,所顯示的錯亂輸出,表明8號線程啟動的時候,4號線程還沒有完成在stdout上的寫操作。事實上假定在你自己的機器上運行上面的代碼,將會獲得全然不同的結果,甚至是會輸出些混亂的字符。原因在于,程序內的11條線程都在競爭性地使用stdout這個公共資源(案:Race Conditions)。 要避免上面的問題,可以在代碼中使用攔截器(barriers),如std:mutex,以同步(synchronize)的方式來使得一群線程訪問公共資源,或者,如果可行的話,為線程們預留下私用的數(shù)據(jù)結構,避免使用公共資源。我們在以后的教學中,還會講到線程同步問題,包括使用原子操作類型(atomic types)和互斥體(mutex)。 更多內容請參考: C++11 并發(fā)指南一(C++11 多線程初探) |
|