在C ++中,有什么原因可以产生并立即加入线程,而不仅仅是直接调用该函数?

时间:2019-04-13 23:41:18

标签: c++ multithreading

在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();

在我看来,第一个选择只是无缘无故地使用了更多资源来创建线程,但是我错过了什么吗?

1 个答案:

答案 0 :(得分:5)

在C ++中,仅是因为您想要新的线程本地状态,然后处置它。可能是糟糕的设计。

在C ++之外,在某些执行环境中,代码在主线程中的行为与在主线程之外的行为不同。

这可确保代码不在主要的UI线程中运行,同时仍可确保其阻塞和同步。

一个实际的选择可能正在执行某些任务,该任务以您不信任的方式搞乱了自己的线程状态,也不知道如何完全逆转。即,第三方库。基本上这是第一种情况,但是您试图将自己从无法重写的错误代码中拯救出来。