C++中怎么實(shí)現(xiàn)一個(gè)多線(xiàn)程計(jì)數(shù)器,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
創(chuàng)新互聯(lián)主打移動(dòng)網(wǎng)站、成都網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)站改版、網(wǎng)絡(luò)推廣、網(wǎng)站維護(hù)、域名注冊(cè)、等互聯(lián)網(wǎng)信息服務(wù),為各行業(yè)提供服務(wù)。在技術(shù)實(shí)力的保障下,我們?yōu)榭蛻?hù)承諾穩(wěn)定,放心的服務(wù),根據(jù)網(wǎng)站的內(nèi)容與功能再?zèng)Q定采用什么樣的設(shè)計(jì)。最后,要實(shí)現(xiàn)符合網(wǎng)站需求的內(nèi)容、功能與設(shè)計(jì),我們還會(huì)規(guī)劃穩(wěn)定安全的技術(shù)方案做保障。
以計(jì)數(shù)器實(shí)現(xiàn)為例子,演示了多線(xiàn)程計(jì)數(shù)器的實(shí)現(xiàn)技術(shù)方法,代碼如下:
//目的: 測(cè)試?yán)肅++ 11特性實(shí)現(xiàn)計(jì)數(shù)器的方法 //操作系統(tǒng):ubuntu 14.04 //publish_date: 2015-1-31 //注意所使用的編譯命令: g++ -Wl,--no-as-needed -std=c++0x counter.cpp -lpthread #include#include #include #include using namespace std; atomic_int Counter(0); int order[400]; void work(int id) { int no; for(int i = 0; i < 100; i++) { no = Counter++; order[no] = id; } } int main(int argc, char* argv[]) { vector threads; //創(chuàng)建多線(xiàn)程訪(fǎng)問(wèn)計(jì)數(shù)器 for (int i = 0; i != 4; ++i) //線(xiàn)程工作函數(shù)與線(xiàn)程標(biāo)記參數(shù) threads.push_back(thread(work, i)); for (auto & th:threads) th.join(); //最終的計(jì)數(shù)值 cout << "final :" << Counter << endl; //觀(guān)察各線(xiàn)程的工作時(shí)序 for(int i = 0; i < 400; i++) cout << "[" << i << "]=" << order[i] << " "; return 0; }
注意編譯命令的參數(shù),尤其,-lpthread
否則,若無(wú)該鏈接參數(shù),則編譯不會(huì)出錯(cuò),但會(huì)發(fā)生運(yùn)行時(shí)錯(cuò)誤:
terminate called after throwing an instance of ‘std::system_error’
what(): Enable multithreading to use std::thread: Operation not permitted
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。