std::线程c++.更多线程相同的数据
std::thread c++. More threads same data
我使用visual studio 2012和c++11。我不明白为什么这不起作用:
void client_loop(bool &run)
{
while ( run );
}
int main()
{
bool running = true;
std::thread t(&client_loop,std::ref(running));
running = false ;
t.join();
}
在这种情况下,线程t
的循环从未完成,但我显式地将running
设置为false
。run
和running
的位置相同。我试图将running
设置为单个全局变量,但没有发生任何事情。我试图传递一个指针值,但什么也没有。
线程使用同一个堆。我真的不明白。有人能帮我吗?
你的程序有未定义行为,因为它在running
变量上引入了数据竞争(一个线程写它,另一个线程读它)
你应该使用互斥锁来同步访问,或者让running
和atomic<bool>
:
#include <iostream>
#include <thread>
#include <atomic>
void client_loop(std::atomic<bool> const& run)
{
while (run.load());
}
int main()
{
std::atomic<bool> running(true);
std::thread t(&client_loop,std::ref(running));
running = false ;
t.join();
std::cout << "Arrived";
}
const
可能不会影响编译器对代码的视图。在单线程应用程序中,该值不会改变(并且这个特定的程序没有意义)。在多线程应用程序中,由于它是原子类型,编译器无法优化负载,因此实际上这里没有真正的问题。这更多的是风格问题;由于main
修改了值,而client_loop
查找了该修改,因此我认为该值为const
似乎不正确。
相关文章:
- 在cuda线程之间共享大量常量数据
- 将线程中的数据存储到全局容器的最佳方法?
- 线程之间的实时数据共享
- C++:在多个线程中访问同一数组/向量的不同单元格是否会产生数据竞赛?
- 提供对不同类型的数据(建议、代码审查)的线程安全访问的类
- 在线程函数中处理数据向量时进行线程竞速
- 使来自线程的数据流对所有其他线程都可读
- 简单使用 std::atomic 在两个线程之间共享数据
- 为什么添加延迟会提高此多线程环境中的数据吞吐量?
- 跨线程共享数据集与拆分每个线程的数据
- 标准 cpp 数据结构和线程互斥锁?
- 在std::线程中使用已分配的结构数据
- 多个线程将数据发送到数组C++
- Qt C++ - 如何将数据从工作线程传递到主线程?
- 在使用 std::cout 和多线程程序中如何避免数据竞争<iomanip>?
- 充分私有化 OpenMP 线程中的数据
- 用于在C++中计算用户数据的线程
- 在不减慢线程速度的情况下保存大量数据
- 线程清理器检测到数据争用,问题出在哪里?
- Qt 如何将数据从一个 GUI 传递到另一个线程