有这个代码:
if(pid_t pid = fork()) // spawn child process
{
// parent process
LOG("Try to execute smth. in child process");
return;
}
else
{
// child process
doWork();
std::terminate();
}
这里产生了一个子进程,其中执行了一些工作。在其他地方(即在流程结束时)有这样的:
// wait childern(some code may call fork())
const pid_t pid{::wait(nullptr)};
在这里,该进程正在等待子进程(之前分叉的)终止。所以,所有这些乐趣都不能与 key 一起使用-fsanintize=thread
。代码挂起是wait
因为编译器添加了一些不会自行终止的子进程。
问题。如何在没有 的情况下实现类似的行为wait
?这样任务异步运行,主进程在终止时等待这些任务完成。也许使用线程,而不是进程。如果我有 Qt 可供我使用,我会将它们doWork
放入QThreadPool
其中,他会等待析构函数中所有任务的完成。但我没有 Qt,但我有 C++14 和 pthread。有人可以提出任何解决方案吗?
您可以使用
std::thread
:此外,要并行化该过程,您可以使用
std::async
:我得到以下结果:
std::async
- 高级工具,它不保证代码一定会在单独的线程中执行。接下来,我举一个线程管理最简单的例子,虽然这是一个完全不同的故事,但我强调这是最简单的例子,还有很多需要解决的,比如所有线程共享cout:
我匆忙把它扔了进去,但我认为这个想法很清楚。
http://rextester.com/LUZI37730