在之前的學習過程中,關於多執行緒伺服器程式設計的學習內容主要在linux上的c語言實現,例如pthread_create,等函式,如今c++11也有很多支援多執行緒的函式和方法(當然環境選擇linux或者windows都是可以的),並且更加高效和靈活,學無止境,從這次開始,進入到c++11多執行緒伺服器程式設計開發的學習中。
c++11提供的的多執行緒程式設計介面
高階介面:future,async
低階介面:thread,mutex
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
/* at the std namespace,thread class is a way to create thread,in my example,work is a thread object
work.join well block the mainthread and ask the "work" thread if over,if the "work" thread is over
the program well continue to run,otherwise,it well always block
*/void
helloword()
intmain()
1.隨著時代的發展,cpu單核紅利已經結束,伺服器開發使用多執行緒大勢所趨。
2.多執行緒有著自身的優勢,能有效利用多核計算機的效能。
3.實踐驗證理論,理論反推動實踐,如今作業系統、標準庫和第三方庫都支援了多執行緒的api,使用更加方便。
4.多執行緒和非同步i/o的關係,單執行緒是阻塞i/o,如果操作i/o很耗費時間,勢必拖累整體速度,但是多執行緒不會有這種情況。
#include
#include
#include
#include
#include
#include
#include
#include
#include
//if you need to updata the new work setting,please select the tools menu and choose "get tools and function" option
//learn some useful tips
//std::cout function()
//this is "auto& i" diofferent with "auto i"
std::cout << str1 << std::endl;
for(
auto
& i : str2)
std::cout << str2 << std::endl;
}//attention:when a value's type is cite,if we use auto ,it isn't be a cite,for example
void
function_2()
void
function_3()
//about multithread test
double
math_algorithm
(double value)
template
<
typename iter,
typename fun>
double
count_up
(std::thread::id id,iter iterbegin, iter iterend, fun func)
else
double value =
double()
;for
(auto iter = iterbegin; iter != iterend; iter++
)return value;
}int
main()
std::cout << db.
size()
<< std::endl;
double value =
double()
;auto start =
clock()
;for
(auto
& type : db)
//singlethread pass the test only use a thread
auto end =
clock()
; size_t size = db.
size()
; std::cout <<
"single thread"
<< value <<
"it use:"
<<
(end - start)
<< std::endl;
end =
clock()
;//in my setting ,multithread pass the test use two threads
//cut down the vector
auto antheriter = db.
begin()
+ size;
double anthervalue =
double()
;//at the mainthread
double mainhalfvalue =
count_up
(mainthreadid, db.
begin()
, antheriter, math_algorithm)
;auto iterend = db.
end();
//at the workthread
//important to learn it ---- multithread
std::thread s([
&anthervalue, mainthreadid, antheriter, iterend]()
);//clear up the pthread
s.join()
; start =
clock()
; std::cout <<
"multithread"
<< anthervalue + mainhalfvalue <<
"it use:"
<<
(start - end)
<< std::endl;
return0;
}
在這裡,我使用到了for(auto& value:type)的遍歷方式,這與一般的for(auto value:type)是不同的,在function函式中,作出了乙個示例來展示他們的不同,使用auto&可以對容器的內容進行修改和更新,這是auto&的隱含功能,在我main實際操作中,auto&這樣寫,更加普適罷了,auto也是可以的,這裡指出來auto和auto&是由區別的,希望大家知曉。
用到了chrono,future,thread這些c++11的標頭檔案,建議本機使用的vs版本在2012以上。
c++11有許多新特性,比如預設的函式比起c++98要多出移動拷貝建構函式和移動賦值函式,這些新的特性之後會慢慢學習到,現在先從多執行緒的基礎入手,循序漸進。
C 11多執行緒程式設計
1 c 11新標準引入了五個標頭檔案支援多執行緒程式設計,分別如下 該標頭檔案 該標頭檔案主要宣告了std thread類,其中std this thread 提供了一些輔助函式 命名空間也在該標頭檔案中 該標頭檔案主要宣告了std atomic和std atomic flag兩個類,另外還宣告了一...
c 11 多執行緒程式設計 原子
以下是我關於c 11多執行緒程式設計的學習體會,希望大家多指正 目的 1 原子型別的引入意味著不需要額外的同步機制就可以執行併發的讀寫操作。2 原子操作的確可以作為解決共享資料引起的問題的一種有效的手段。示例 已在vs2015 編譯通過 test atomic 1.cpp 定義控制台應用程式的入口點...
C 11 多執行緒程式設計 一
執行緒很像輕量級的程序,但是乙個程序中的所有執行緒都共享相同的位址空間,執行緒間的大部分資料都可以共享。執行緒間的通訊一般都通過共享記憶體來實現。優點 缺點 主要原因有兩個 任務拆分和提高效能。在編寫軟體的時候,將相關的 放在一起,將無關的 分開,這是乙個好主意,這樣能夠讓程式更加容易理解和測試。將...