0
我正在使用boost::asio::ioservice
創建一個具有100個線程的線程池。boost :: asio :: ioservice線程池正在同一線程上運行所有代碼ID
在while循環我要發佈5個線程來完成這項工作:
void dowork(int i) {
std::cout << "hello" << std::endl;
cout << " thread ID :" << boost::this_thread::get_id();
}
然後我做work.reset()
。
儘管線程池大小爲100,但在發佈時並不需要5個線程。實際上,當我打印線程ID時,所有5個線程都是相同的。
所以它不是並行執行......爲什麼是這樣?
int main() {
int ch;
int i;
boost::asio::io_service ioservice;
boost::thread_group threadpool;
auto_ptr<boost::asio::io_service::work> work(
new boost::asio::io_service::work(ioservice)
);
for(i=0; i<100; i++) {
threadpool.create_thread(
boost::bind(&boost::asio::io_service::run, &ioservice)
);
}
ch=0;
while(ch <= 5) {
ch++;
cout << "in main" << boost::this_thread::get_id() << endl;
for(i=0; i<5; i++) {
ioservice.post(boost::bind(dowork,10));
}
std::cout << "size=" << threadpool.size() <<std::endl;
work.reset();
ioservice.reset();
ioservice.run();
}
}
請編輯文本的牆以便讀取更多 – sp2danny
您並未真正傳遞任何消息的線程,我認爲您需要返回文檔 – sp2danny
@imran有幾個人編輯了您的問題。我把它從負面提高了,因爲如果它的寫法像最終版本一樣,那麼它就會很好。然而,請[注意更改](http://stackoverflow.com/posts/24710187/revisions)並專注於如何提出明確的問題。 [本指南MarkDown](http://stackoverflow.com/editing-help)應該是有幫助的;嘗試確保在發佈前預覽清晰。 – HostileFork