gpt4 book ai didi

c++ - 我如何单独创建和启动我的线程

转载 作者:搜寻专家 更新时间:2023-10-31 01:27:25 24 4
gpt4 key购买 nike

我想做的是创建一些线程并将它们推送到一个 vector 中,以便在经过一些检查后启动它们。

所以在我的主要部分,我想创建如下主题

int main()
{

Pont pont;

for (int k = 0; k <= 20; k++) {
std::thread th(crossBridge);
pont.threadsW.push_back(std::move(th));
}

pont.init();
return 0;
}

并在此处启动主题:

void WestToEast()
{
cout << "préparation du trafic vers l'est \n";
while (true) {
std::unique_lock<std::mutex> lock(mut);
while (!notified2) {
cond.wait(lock);
}

while (!threadsE.empty() && j < 10) {
j++;

""
" i want to launch theme here "
""
}
j = 0;
notified1 = true;
notified2 = false;
}
}

感谢每一个建议,以及一旦启动并从 vector 中删除如何加入主题

ps: 刚刚贴出相关部分代码

最佳答案

您可以使用默认构造的(空)线程对象填充您的 vector 。

for (int k = 0; k<=20; k++)
pont.threadsW.push_back({}); // populate vector with empty thread objects

完成检查后,将每个 vector 对象与一个线程函数相关联。

for (auto& th : pont.threadsW)
th = thread(crossBridge);

您并没有真正创建一个线程并将其推迟到它启动时。相反, vector 中填充了空线程对象。一旦将新线程移动到 vector 线程对象中,就会创建实际线程并开始运行。

完成后,对每个线程对象调用 join()

for (auto& th : pont.threadsW)
th.join();

如果您的线程函数需要在执行启动前检查时处于运行状态,则需要额外的同步,每个线程都在等待完全清除信号,然后才能继续运行。

关于c++ - 我如何单独创建和启动我的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53404045/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com