日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

java中的STL库_C++11 STL线程库实现一个简单的线程池

發(fā)布時(shí)間:2025/3/15 c/c++ 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中的STL库_C++11 STL线程库实现一个简单的线程池 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

使用C++11 STL線程庫實(shí)現(xiàn)一個(gè)線程池。處理機(jī)制是搶占式的,即所有線程從一個(gè)隊(duì)列(std::queue)中獲取任務(wù)執(zhí)行(計(jì)算字符串簡(jiǎn)單HASH值),使用std::mutex和std::conditional_variable實(shí)現(xiàn)隊(duì)列訪問并發(fā)協(xié)調(diào)。

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

static std::mutex G_lockPrint;

void print_message(int value, const string& str) {

lock_guard lock(G_lockPrint);

cout<

cout<

}

#define THREAD_COUNT 10

int main()

{

thread thpool[THREAD_COUNT];

mutex quelock;

condition_variable quecv;

queue strqueue;

volatile bool stop = false;

for(int i = 0; i < THREAD_COUNT; ++i ) {

thpool[i] = thread([&quelock, &quecv, &strqueue, &stop]()

{

string str;

while ( !stop ) {

{

unique_lock lock(quelock);

if ( strqueue.empty() ) {

auto ret = quecv.wait_for(lock, chrono::seconds(1));

if ( ret == cv_status::timeout) continue;

}

if ( !strqueue.empty() ) {

str = strqueue.front();

strqueue.pop();

} else {

continue;

}

}

int hash = 0;

for(size_t i = 0; i < str.length(); ++i) {

hash = (hash << 5) - i + str[i];

}

print_message(hash, str);

} // end while

}

);

}

for(int i = 0; i < 100000; ++i) {

stringstream ss;

ss<

lock_guard lock(quelock);

strqueue.push(ss.str());

quecv.notify_one();

}

while (1) {

this_thread::sleep_for(chrono::seconds(1));

lock_guard lock(quelock);

if ( strqueue.empty()) break;

}

stop = true;

for(int i = 0; i < THREAD_COUNT; ++i ) thpool[i].join();

cout<

return 0;

}

總結(jié)

以上是生活随笔為你收集整理的java中的STL库_C++11 STL线程库实现一个简单的线程池的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。