[英]Thread-ID is always the same in my boost::asio::thread_pool
我嘗試了boost 文檔中的示例:
#include <boost/thread/thread.hpp>
#include <iostream>
#include <boost/asio/post.hpp>
#include <boost/asio/thread_pool.hpp>
int count = 0;
void my_task() {
count++;
const auto my_count = count;
std::cout << "Task " << my_count << ") BEGIN: Thread-ID:" << boost::this_thread::get_id << std::endl;
boost::this_thread::sleep(1000000000);
std::cout << "Task " << my_count << ") END: Thread-ID:" << boost::this_thread::get_id << std::endl;
}
int main(int argc, char** argv) {
std::cout << "Main-thread-ID: " << boost::this_thread::get_id << std::endl;
// Launch the pool with two threads.
boost::asio::thread_pool pool(2);
// Submit a function to the pool.
boost::asio::post(pool, my_task);
boost::asio::post(pool, my_task);
boost::asio::post(pool, my_task);
boost::asio::post(pool, my_task);
boost::asio::post(pool, my_task);
// Wait for all tasks in the pool to complete.
pool.join();
return 0;
}
輸出是:
Main-thread-ID: 00CC96C6
Task 1) BEGIN: Thread-ID:00CC96C6
Task 2) BEGIN: Thread-ID:00CC96C6
Task 1) END: Thread-ID:00CC96C6
Task 3) BEGIN: Thread-ID:00CC96C6
Task 2) END: Thread-ID:00CC96C6
Task 4) BEGIN: Thread-ID:00CC96C6
Task 4) END: Thread-ID:00CC96C6
Task 3) END: Thread-ID:00CC96C6
Task 5) BEGIN: Thread-ID:00CC96C6
Task 5) END: Thread-ID:00CC96C6
為什么始終顯示相同的線程 ID? 我做錯了什么嗎? 它仍然並行執行我的任務。 所以,我不太擔心。
當我嘗試使用boost::thread_group
的類似示例時,我看到了相同的行為。
感謝卡爾德爾! 我將所有出現的boost::this_thread::get_id
為boost::this_thread::get_id()
,這導致了不同線程 ID 的預期輸出:
Main-thread-ID: 5a78
Task 1) BEGIN: Thread-ID:77d0
Task 1) BEGIN: Thread-ID:5f34
Task 1) END: Thread-ID:5f34
Task 1) END: Thread-ID:77d0
Task 2) BEGIN: Thread-ID:5f34
Task 3) BEGIN: Thread-ID:77d0
Task Task 2) END: Thread-ID:5f34
3) END: Thread-ID:77d0
Task 4) BEGIN: Thread-ID:77d0
Task 4) END: Thread-ID:77d0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.