B线程可以在A线程中创建吗?
等待B线程结束后,Can A线程能继续运行吗?
答案 0 :(得分:1)
简短回答
线程A和主线程之间的概念差别很小。 请注意,您甚至可以在主线程中加入线程B,即使它是从线程A创建的。
示例:(如果您还没有c ++ 11编译器,请将<thread>
替换为<boost/thread.hpp>
)
<强> Live On Coliru 强>
#include <thread>
#include <iostream>
void threadB() {
std::cout << "Hello world\n";
}
void threadA() {
std::thread B(threadB);
B.join();
std::cout << "Continued to run\n";
}
int main() {
std::thread A(threadA);
A.join(); // no difference really
}
打印
Hello world
Continued to run
答案 1 :(得分:0)
如果B是A的子线程?
有多种方法可以同步线程以进行转弯。它们是否可以并行运行取决于使用内核线程还是用户线程。用户线程不知道不同的处理器,因此它们无法在并行中真正运行。如果您希望线程轮流,可以使用互斥锁/信号量/锁来同步它们。如果您希望它们以真正的并行方式运行,则需要B作为A的子进程。
您还可以结束子线程/进程,在这种情况下将调度父线程。如果没有某种同步,通常无法保证调度。
答案 2 :(得分:0)
void FuncA() {
if(ScanResultsMonitorThread == NULL) {
/* start thread A */
}
}
void FunAThread() {
while(1) {
FuncB();
}
}
void FuncB() {
try {
boost::this_thread::sleep(boost::posix_time::seconds(25));
}
catch(const boost::thread_interrupted&) {
}
if(needRestart){
/* create thread B */
boost::thread Restart(&FuncBThread,this);
boost::this_thread::sleep(boost::posix_time::seconds(10));
/* program can not run here and thread A end, why? */
}
else {
}
}