![]() |
1
12
这将取决于你的架构。虽然要求显式缓存刷新或内存同步以确保内存写入对其他线程可见是不寻常的,但没有什么能阻止它,而且我确实遇到过必须执行显式指令以确保状态刷新的平台(包括我当前正在为之开发的基于PowerPC的设备)。 请注意,线程同步原语(如mutex)将根据需要执行必要的工作,但如果您只想确保状态可见而不考虑一致性,则通常不需要线程同步原语-只需同步/刷新指令即可。
编辑:对任何仍对
|
![]() |
2
5
如果我已经正确理解了相关的部分,c++ 0x就不能保证它是独立变量,甚至是易失性变量(它不是为使用而设计的),而是会引入原子类型来保证它(见头)。
|
![]() |
3
3
首先,如果它没有标记为volatile,编译器很可能只加载一次。因此,无论内存最终是否改变,都不能保证编译程序会设置它。 因为您明确地说“没有互斥体”,所以pthreads不适用。 除此之外,由于C++没有内存模型,它依赖于硬件体系结构。 |
![]() |
4
3
这是一场潜在的数据竞赛。 对于posix线程,这是ub。与C++一样,我相信。 实际上,我无法想象它会怎么失败。 |
![]() |
5
2
如果变量不是可变的,您就没有任何保证。在C++0X之前,该标准对线程没有任何意义,而且由于变量不是易失性的,所以读/写被认为是不可观察的副作用,所以编译器可以作弊。在C++0X之后,这是一个争用条件,它被明确地声明为未定义的行为。 如果变量是可变的,则可以得到读/写的保证 将 这样,编译器就不会根据其他易失性内存访问进行重新排序。(然而,这本身并不能保证CPU不会重新排序这些内存访问——只是编译器不会这样做) 但您不能保证它不会相对于其他非易失性访问进行重新排序,因此您可能无法获得预期的行为。尤其是,如果编译器认为这样做是安全的(也是有益的),那么在while循环之后,您试图“保护”的一些指令可能会被移到循环前面。但是在执行这个分析时,它只关注当前线程,而不关注其他线程中发生的事情。
因此,不,一般来说,即使在
|
![]() |
6
0
我认为它最终会在任何平台上工作,但不知道你可能看到的延迟。
但是,老实说,在投票等待事件的时候进行投票是非常糟糕的方式。即使你做了
既然您已经知道如何将一个变量放置在两个变量都可以访问的地方,那么为什么不使用正确的工具来执行一个不会耗尽资源的等待呢?一对
|
![]() |
sid_com · 为条件OO模块加载编写包装器模块的正确方法是什么? 11 年前 |
![]() |
tssch · 获取用户名的可移植方式 11 年前 |
![]() |
Prof. Falken · 如何编写(可移植的)反向网络字节顺序? 11 年前 |