hi,
I used the following piece of code after following your suggestions. Iam new to boost and even multi-threading
When I ran this piece of code
on my machine I found that for every run 4 threads are only used out of the pool. As I have 4 cores in my machine. Is it so??
#include <iostream>
#include <boost/asio.hpp>
#include <boost/thread.hpp>
boost::atomic_int thrd_gen(0);
void dowork(int i) {
thread_local int tid = ++thrd_gen;
std::cout << "hello";
std::cout << " thread ID :" << tid << "\n";
}
int main() {
boost::asio::io_service ioservice;
boost::thread_group group;
boost::optional<boost::asio::io_service::work> work(boost::asio::io_service::work{ioservice});
for(size_t i=0; i<boost::thread::hardware_concurrency(); i++) {
group.create_thread(
boost::bind(&boost::asio::io_service::run, &ioservice)
);
}
std::cout << "in main thread size=" << group.size() <<std::endl;
for(int i = 0; i <= 5; ++i) {
for(int i=0; i<5; i++) {
ioservice.post(boost::bind(dowork,10));
}
boost::this_thread::sleep_for(boost::chrono::milliseconds(600));
std::cout << "waking up\n";
}
work.reset(); // allow threads to exit
group.join_all(); // await proper thread shutdown
}
Also, my application is time-sensitive and I need to do some time measures. If I use sleep my results will be incorrect. So, please suggest an alternative way to get notified when all the threads finish without using sleep.
Thanks for your time on this