【发布时间】:2020-01-12 18:36:54
【问题描述】:
让我安全地定义:不返回乱码。 假设我有一个任何类型的变量;对于这个例子,我使用一个 int 和一个类
class Example
{
int a;
public:
void set_int(int b) { a = b; }
void do_stuff() { std::cout << a << std::endl; }
}
如果一个线程意外调用 set_int,而另一个线程定期调用 do_stuff(),如果发生冲突,我会简单地打印以控制 a 的旧值(在我的情况下仍然可以),或者我是会在 a 上看到完全不可预测的值吗?
请注意,对我所说的类所做的任何更改都只是一个值重新分配,没有向容器或类似的东西添加元素,不涉及索引或迭代器;只是价值观。
【问题讨论】:
-
数据竞争表现出未定义的行为。未定义的行为意味着任何事情都可能发生,从“似乎有效”到nasal demons。不要试图推断这个还不错 - 没有 benign data race 这样的东西。说不。
-
@dandan78 出于某种原因,我一直在寻找一个关于没有写入的并发读取的问题,但我找不到你链接的那个。我是否应该将自己的问题标记为重复以帮助将来搜索?
标签: c++ multithreading