【发布时间】:2015-12-25 21:29:17
【问题描述】:
所以我有这门课:
class foo {
public:
foo() { };
void me1() const {
while(1) {
std::lock_guard<std::mutex> ldock(m);
std::cout << 0;
}
}
void me2() const {
while(1) {
std::lock_guard<std::mutex> ldock(m);
std::cout << 1;
}
}
private:
std::mutex m;
};
现在我想在两个不同的线程中运行这两个方法,我这样做:
int main() {
foo myfoo;
std::thread firstThread(&foo::me1, &myfoo);
std::thread secondThread(&foo::me2, &myfoo);
firstThread.detach();
secondThread.detach();
//while(1) { }
return 0;
}
我不想等待这两个方法中的任何一个完成,它们会同时运行直到主线程被杀死。
在主线程结束时可以有某种无限循环吗? (喜欢评论的while(1) {})。
或者我应该调用某种sleep 函数?
【问题讨论】:
-
如果它们会同时运行直到主线程被杀死,你为什么不干脆等待它们呢?您将等待它们直到它们死亡,如果主线程被杀死,那么两者都会死亡。如果他们两个都执行完了,主线程就没有目的了,他就可以死了。
-
@MariusMarusanici 在你的问题中你说你不需要等待它们,当你加入两个线程时,你只需等待它们都完成。因此,如果一个永远不会结束,那么您的主线程将永远不会结束,直到它被杀死,我以为是您在问。
-
@g24l 如果主线程结束,子线程也会被杀死,所以他需要
-
从技术上讲,您的循环可能会导致未定义的行为:stackoverflow.com/q/3592557/212870
-
Omg ,只需从您的函数中删除那些 const 说明符或使互斥体可变,请。
标签: c++ multithreading stdthread