- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
using System;
using System.Threading;
using System.Threading.Tasks;
class Program
{
static void Main()
{
double[] numbers = new double[10000];
Parallel.For(0, 9999, index => numbers[index] = index * 3);
Thread.MemoryBarrier();
// do something with numbers
}
}
上面是否需要 MemoryBarrier(),或者 Parallel.For 是否具有“内置”内存屏障?
最佳答案
当你做一个并行时,不需要内存屏障。对于调用函数的线程等待任务结束,如果等待,它可能使用一些同步器,通知等待线程,当一个同步器通知“需要”有一个释放屏障,一个释放屏障保证上面代码中所做的所有更改都是全局可见的,所以你不需要 memory.barrier
关于c# - 此代码中是否需要 MemoryBarrier?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4476418/
VB.Net 没有等效的 C# volatile 关键字,因此您必须手动实现 volatile,这通常通过在读取之前和写入之后调用 Thread.MemoryBarrier() 来完成。所以这样的事情
using System; using System.Threading; using System.Threading.Tasks; class Program { static void
我修改了 Non-Blocking Synchronization 上给出的程序如下: class DemoProg { int _answer; bool _complete;
如果我理解正确,在 C# 中,一个 lock block 保证对一组指令的独占访问,但它也保证从内存中读取的任何内容都反射(reflect)了任何 CPU 缓存中该内存的最新版本.我们将 lock b
我需要一种可靠的方法来获得系统正常运行时间,并最终使用了如下方法。添加了一些评论以帮助人们阅读它。我不能使用任务,因为它必须在 .NET 3.5 应用程序上运行。 // This is a struc
由于似乎上下文切换可能发生在指令执行的任何时刻,所以我现在想知道为什么代码“部分有问题”(那两条指令)有意义,如果上下文切换可以在任何指令之间发生并且我们可能在不同的CPU上第二条指令的核心。 voi
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Why we need Thread.MemoryBarrier()? 摘自 O'Reilly 的 C# i
在 Java 中,我如何显式触发一个完整的内存栅栏/屏障,等于调用 System.Threading.Thread.MemoryBarrier(); 在 C# 中? 我知道,自从 Java 5 读取和
对于以下场景,使用MemoryBarrier在线程安全性、结果和性能方面是否有任何差异 private SomeType field; public SomeType Property { g
在这本线程在线书籍中:http://www.albahari.com/threading/part4.aspx 有一个 Thread.MemoryBarrier() 的例子 class Foo
这个网站的新手,所以如果我没有以可接受的方式发帖请告诉我。 我经常按照下面的示例编写代码(为清楚起见,省略了 Dispose 之类的内容。)。我的问题是,是否需要如图所示的 volatile ?或者
在“C# 4 in a Nutshell”中,作者展示了这个类有时可以在没有 MemoryBarrier 的情况下写入 0,尽管我无法在我的 Core2Duo 中重现: public class Fo
在 .NET 中 lock关键字是 Monitor.Enter 周围的语法糖和 Monitor.Exit ,所以你可以说这段代码 lock(locker) { // Do something }
下面的 GLSL 计算着色器简单地复制了 inImage至 outImage .它源自更复杂的后处理过程。 在main()的前几行,单个线程将 64 个像素的数据加载到共享数组中。然后,在同步之后,6
根据Web,我找到了如下代码,相当于C# Volatile for VB.NET。 代码引用:How do I specify the equivalent of volatile in VB.net
只是在业余时间玩并发性,并想尝试在不使用读取器端锁定的情况下防止撕裂读取,以便并发读取器不会相互干扰。 这个想法是通过锁序列化写入,但在读取端仅使用内存屏障。这是一个可重用的抽象,它封装了我提出的方法
通过浏览 MEF 源代码,我找到了这篇文章。有人可以解释为什么锁内需要 MemoryBarrier 吗? 整个方法是: public void SatisfyImportsOnce(Composabl
假设我有一个字段控制某个循环的执行: private static bool shouldRun = true; 我有一个正在运行的线程,其代码如下: while(shouldRun) { /
在 msdn 上 http://msdn.microsoft.com/en-us/library/windows/desktop/ms684208(v=vs.85).aspx , MemoryBarr
如果我正确理解 volatile 和 MemoryBarrier 的含义,那么下面的程序将永远无法显示任何结果。 每次我运行它时,它都会捕获写入操作的重新排序。我在 Debug 或 Release 中
我是一名优秀的程序员,十分优秀!