【问题标题】:Is it always effective to read a variable in the multi-thread environment?多线程环境下读取变量总是有效吗?
【发布时间】:2013-03-17 07:36:00
【问题描述】:

在多线程环境中有一个变量(例如 int temp;)。 一些线程写入它,写锁保护。 而其他人读取变量,但没有任何锁定。

我的问题是: 如果变量被写入 SET 中的元素之一(例如 {1, 2, 3}), 通过一些线程反复。 当我读到它时,它总是其中一个吗?

【问题讨论】:

标签: c++ linux multithreading kernel cpu


【解决方案1】:

规则非常简单:如果两个或多个线程访问同一个变量并且其中至少一个线程写入它,您必须同步所有这些访问.如果不这样做,则行为未定义。

volatile 在这里帮不上忙;要么使用互斥体或条件变量,要么使变量本身原子化。 (并且“原子”是指 C++11 原子,而不是一些人们认为在多线程应用程序中表现良好的属性选择)。

【讨论】:

  • 我同意你的看法。我把这个问题放在这里是因为我看过很多写的代码,假设我的问题的答案是'YES',这让我很困惑。但它通常可能是“是”,:)..
【解决方案2】:

是的,如果你的变量的类型是不可变的,因为 SET 不允许重复

参考SET

【讨论】:

  • 嗯,你好像误会了我的话。我这里的 SET 表示一组值,例如 {1, 2, 3}。
【解决方案3】:

如果没有人从您的 SET 之外写入值,则该值将保留在该 SET 中。在您的情况下,您可能需要使用volatile

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    • 2011-03-19
    相关资源
    最近更新 更多