等待其他线程继续
wait for other thread to proceed
在C++中,我有以下示例实现:
#include <thread>
#include <iostream>
void doSomeWork( void )
{
std::cout << "hello from thread..." << std::endl;
while(true)
{
printf("Getting inside doSomeWorkn");
sleep(1);
}
}
int main( int argc, char *argv[] )
{
std::thread t( doSomeWork );
t.join();
processing();
return 0;
}
void processing()
{
while(true)
{
printf("Getting inside processingn");
sleep(1);
}
}
我有一个问题,doSomeWork()一直在做事情,它阻止了处理()。我认为线程是异步的,所以在它睡觉的时候,我可以做其他事情。我的问题是如何在doSomeWork()中休眠并生成其他线程,然后恢复doSomeWork()?
行
t.join();
暂停调用线程,直到线程t
完成(当doSomeWork()
返回时)。
将代码更改为
std::thread t( doSomeWork );
processing();
t.join();
如果您希望processing()
和doSomeWork()
并行运行。
用t.detach();
替换t.join();
然而,请注意,detach
的意思类似于"我对这个线程不感兴趣,所以它可能随时终止"或"我将通过某种同步机制同步线程"。基本上,当你有一些外部(线程)同步机制,所以你不想使用联接时,就会使用它。通常每次都使用join
,但只有在需要时才使用detach
。在您的特定情况下,您有带有永久循环的同步机制,所以使用detach
是完全可以的,但要注意它们的差异。
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 在C++中使用cURL和多线程
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在cuda线程之间共享大量常量数据
- 如何将元素添加到数组的线程安全函数?
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 超时后,线程睡眠不会继续执行
- 如何让线程继续并启动其他功能 - C++使用 OpenMP?
- 睡眠线程或进程的指令是否在线程/进程休眠时继续执行?
- 如何让一个线程继续,而另一个线程正在等待C++中的信号量
- 现代C++.从继续执行的工作线程返回数据结构
- OpenMP 构造,在至少 1 个线程完成后立即继续执行
- 在 GDB 中调试多线程服务器 - 查找每个线程的状态.执行时继续并停止
- 创建了三个线程来实例化同一个类.但很快只有一个线程继续运行
- 继续执行另一个线程
- c++分离线程在其关联对象被删除后继续工作
- 等待其他线程继续
- std::thread -如何使主线程继续运行,子线程分支
- c++ 11线程是否提供了一种在主线程退出后分离线程继续的方法?