如果在线程对象构造完成后没有保证线程实际运行,我在documentation中找不到任何信息。换句话说,在线程构造函数完成之后,是否保证线程函数已被执行?一些参考将不胜感激。std ::线程构建和执行
1
A
回答
9
不,不能保证线程在std::thread
构造函数完成时开始执行。所有可以保证的是它被调度执行,所以在调用构造函数之后的某个点,线程将运行,并且在相关的std::thread
对象返回join()
的调用之前将会完成。
2
从C++ 11,30.3.1.2/4,关于thread
构造你提到:
template <class F, class ...Args> explicit thread(F&& f, Args&&... args);
效果:构造
thread
类型的对象。执行的新线程执行INVOKE (DECAY_COPY(std::forward<F>(f)), DECAY_COPY(std::forward<Args>(args))...)
,并在构造线程中调用DECAY_COPY
进行评估。此调用的任何返回值都会被忽略。
4
是有保证的线程功能已经被线程构造后执行完毕
C++标准不能要求这一点。
它取决于操作系统,其进程调度程序和当前系统负载。有时线程在构造函数返回时开始执行,有时不会。
它有可能为新线程让父线程知道它是否已经开始使用IPC执行,例如信号,管道或互斥锁和条件变量。
1
“running”是什么意思?保证 参数将被复制,并且至少在大多数系统上,复制必须发生在新创建的线程中。但那 没有多大意义。对此,什么是重要的? 在你从构造函数返回之前,新创建的线程执行单机 指令?它 已经执行完整的C++语句?或者是什么?
1
不能有在C++标准如此出示担保,作为创建的线程将被放到调度的运行队列,并最终被执行(取决于优先级和操作系统正在处理这些事情的方式) 。
事实上, 20也不是章。 C++标准中有30项提供了这样的保证。
相关问题
- 1. std ::线程何时执行线程?
- 2. 构建一个std ::线程与功能
- 3. C + + std ::线程在执行时崩溃
- 4. std :: async将异步创建和执行的最大线程数是多少?
- 5. C++线程的执行时间和执行线程在另一个线程
- 6. 的std ::线程类的构造函数和析构函数
- 7. std ::线程和std ::互斥问题
- 8. C++线程不执行
- 9. 的Windows线程(C运行时,并行线程,的std ::线程)
- 10. 使用clr和std ::线程
- 11. 线程执行
- 12. 执行线程在c + +
- 13. std ::线程移动构造函数
- 14. 并行执行和终止多线程
- 15. 执行std :: is_class
- 16. 了解多线程和执行过程
- 17. C + + 11:std ::线程内执行一个函数成员与线程初始化在构造函数
- 18. 多线程程序只执行最后创建的线程?
- 19. 线程创建(分离)从未执行
- 20. 自动执行Android构建过程
- 21. std :: thread在主线程上执行回调函数
- 22. 线程和块的限制以及线程和块的执行
- 23. 执行线程onSensorChanged
- 24. 线程不执行
- 25. .net线程执行
- 26. 而线程执行
- 27. 在构建过程中选择性地执行构建任务
- 28. 多线程执行写入?
- 29. Python线程没有执行所有创建的线程
- 30. boost ::线程执行顺序