- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在用 C 编写一些低级同步代码。我遇到了一个问题:
假设有两个线程 Thread A
和 Thread B
在 x86_64 机器上运行。 线程 A
在时间 t1 写入一个内存位置,此后不再写入该位置。 线程 B
在时间 t2 读取相同的内存位置。
Thread A:
foo = magic_value; /* happens at t1 */
Thread B:
bar = foo; /* happens at t2 */
assert(bar == magic_value);
我的问题是:是否存在delta,对于任何 t1 和 t2 t2 - t1 > delta。 线程 B
保证读取 线程 A
在 t1 写入的最新值。
我看过 Intel 和 AMD 的文档,他们没有提到是否存在这样的保证。我知道这个值可能取决于处理器型号甚至主板设计(对于多路机器)。我想在任何当前可用的 x86_64 机器上,这种延迟肯定有一些限制。
我知道如何使用锁或内存屏障等同步原语来保证这种行为。我只需要知道是否存在这样的保证延迟,以便内存访问变得全局可见。
非常感谢!!
最佳答案
我非常确定,无法保证一个 CPU 写入内存位置与另一个 CPU 看到它之间的最长时间。在 NUMA 系统中,一致性协议(protocol)需要很长时间。在实践中它会尽可能快,但我怀疑是否有任何保证。
为什么你需要知道这个?当您编写同步原语时,您只需要考虑排序。 x86_64 强制执行强一致性,这意味着其他 CPU 将按照它们发生的顺序看到存储,而这确实是您唯一需要担心的事情。
关于c - 内存写入何时会变得全局可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17337418/
我在 android 代码中使用 asmack XMPP。我可以正常登录 XMPP 服务器,但是当我尝试创建新用户时出现问题。我想要实现的是: 以管理员身份登录。 创建一个新用户。 从管理员注销。 以
这是我的标记页面,其中有一个按钮可以从数据库中搜索数据并显示在网格中 这是我背后的代码 if (!IsPostBack) { LblInfo.Text = "Page Load
当我多次将相同的 float 值插入到我的集合中时,本应花费恒定时间的 x in s 检查变得非常慢。为什么? 时序x in s的输出: 0.06 microseconds 0.09 mi
我有一个小型聊天客户端,可以将所有历史记录存储在 sqlite 数据库中。当用户单击我的应用程序中的 history 选项卡时,我的应用程序会获取所有相关历史记录并将其显示在 QWebView 中。我
我是一名优秀的程序员,十分优秀!