- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最后一点是最重要的事实。第五点意味着我需要一种机制来保护我的实体不因并发访问/修改而损坏。第四点让我担心,考虑到获取锁的时间跨度很短,诸如互斥锁之类的经典锁定机制(会阻塞线程)是否会产生太多开销。
我想出了两个想法:
你有什么推荐?您同意我的某个想法还是推荐其他想法?如果我将数字更改为,您的建议会改变吗?:
还请指出 C#/.Net 中的实现。提前致谢。
其他信息
实体是值类型(结构)。我无法为每个写入操作创建新对象 - 只能修改现有基元。
最佳答案
正如他们所说,剥猫皮的方法不止一种(尽管为什么有人想要剥猫皮是另一个问题):-)
对于 250K 对象和 4 个线程,您必须猜测冲突会(相对)罕见。这并不意味着我们可以忽略它们,但它可能会影响我们寻找它们的方式。测试关键部分非常快,除非确实存在冲突。这意味着检查每个事务的关键部分可能是可行的,因为我们知道相对较少的检查将花费更多的 CPU 时间。
创建 250K 个临界区是否可行?也许吧,我不确定。您可以使用以下命令创建一个非常轻量级的自旋锁:
while (0 != ::InterlockedExchange(&nFlag, 1)) {};
DoStuff();
nFlag = 0;
另一种方法可能是对数据集进行分区,并让每个线程处理一组唯一的对象。这使得冲突不可能发生,因此不需要锁定。根据问题的性质,您可以通过让每个线程操作一系列数据来实现这一点,或者可能通过为每个工作线程操作一个队列,并让一个或多个扫描线程识别需要处理的对象并将它们推送到适当的对象上来实现这一点。处理队列。
关于.net - 大数组和多线程 - 自旋锁或本地缓冲区还是其他什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3378198/
我试图让我的 SCNNode 自动水平旋转。这是我到目前为止的代码: box.scale = SCNVector3(x: 0.26, y: 0.26, z: 0.26) box.position =
我试图让我的 SCNNode 自动水平旋转。这是我到目前为止的代码: box.scale = SCNVector3(x: 0.26, y: 0.26, z: 0.26) box.position =
我试图让 unicode 三 Angular 形 (▵) 在页面加载时和用户将鼠标悬停在跨度上时旋转 360 度。我已经设置了一个 jsFiddle解释我想要什么。 ULTR▵ 我对 CS
我是一名优秀的程序员,十分优秀!