在C ++中,有人有什么理由要写
outer: if (oldDom == null || oldDom.parentNode !== parentDom) {
parentDom.appendChild(newDom);
} else {
sibDom = oldDom;
j = 0;
while ((sibDom = sibDom.nextSibling) && j++ < oldChildrenLength / 2) {
if (sibDom === newDom) {
break outer;
}
}
parentDom.insertBefore(newDom, oldDom);
}
与
std::thread t(foo);
t.join();
?
在我看来,第一个选择只是无缘无故地使用了更多资源来创建线程,但是我错过了什么吗?
答案 0 :(得分:5)
在C ++中,仅是因为您想要新的线程本地状态,然后处置它。可能是糟糕的设计。
在C ++之外,在某些执行环境中,代码在主线程中的行为与在主线程之外的行为不同。
这可确保代码不在主要的UI线程中运行,同时仍可确保其阻塞和同步。
一个实际的选择可能正在执行某些任务,该任务以您不信任的方式搞乱了自己的线程状态,也不知道如何完全逆转。即,第三方库。基本上这是第一种情况,但是您试图将自己从无法重写的错误代码中拯救出来。