【发布时间】:2019-11-11 05:45:36
【问题描述】:
我正在尝试将代码从单线程转换为多线程(例如,创建 6 个线程而不是 1 个),同时确保它们都开始和结束而不会相互干扰。有什么方法可以做到这一点?我可以只做一个创建线程直到 i
#include <iostream>
#include <boost/thread.hpp>
#include <boost/date_time.hpp>
void workerFunc()
{
boost::posix_time::seconds workTime(3);
std::cout << "Worker: running" << std::endl;
// Pretend to do something useful...
boost::this_thread::sleep(workTime);
std::cout << "Worker: finished" << std::endl;
}
int main(int argc, char* argv[])
{
std::cout << "main: startup" << std::endl;
boost::thread workerThread(workerFunc);
std::cout << "main: waiting for thread" << std::endl;
workerThread.join();
std::cout << "main: done" << std::endl;
system("pause");
return 0;
}
【问题讨论】:
-
您需要一个互斥锁来同步对共享数据的访问,如果线程只是假装做一些有用的事情,您就不需要互斥锁。当您尝试在循环中创建线程时发生了什么?
-
手动管理线程效率不高。 thread pool 从线程中抽象出来,让您专注于工作(任务)。 IE。您只需将任务发布到线程池,线程池将其分派到空闲/空闲的线程。
标签: c++ multithreading boost boost-thread boost-mutex