首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比赛条件怎么会有用呢?

比赛条件怎么会有用呢?
EN

Stack Overflow用户
提问于 2013-12-11 14:43:27
回答 2查看 973关注 0票数 10

One of the answers针对那些竞赛条件被提到的问题,低级别算法故意使用竞赛条件.比赛条件怎么可能是有益的?

编辑:只要没有丢失任何东西,并发性和队列就是故意不关心排序的一个很好的例子。对于“真正毛茸茸的低级算法是如何故意做到这一点”,有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2013-12-11 15:02:52

并不是所有的种族都一样糟糕。

你所能得到的最糟糕的比赛是阅读部分结果。这就是Herb referred to所说的“看到粉色大象”:你的程序能够观察到一种违反所有不变式的中间状态。

这里的典型例子是并发的非原子写入。如果一个线程从另一个线程并发写入的变量中读取,读取器可能会获得完全的垃圾。不仅你看不出读者会看到旧的价值还是新的价值,它实际上可能会看到一个从未被任何人写过的值。这种类型的数据竞争需要不惜一切代价加以避免,因为几乎不可能以任何方式对观察到的值进行推理。例如,在这种情况下,C++直接将您发送到未定义的行为域。

一种不太重要的竞争是当所有的数据访问都是原子的,所以您知道读者只会观察到完整的书面值,但是顺序没有指定。所以你不知道你读的值是否是最新的,或者你一起读的两个值是否同时存在于内存中。出于性能原因,接受这一点通常是有用的。这里一个突出的例子是分布式应用程序:通过网络同步数据的速度特别慢,因此人们常常认为,某些节点可能对世界有过时的看法,但仍然能够基于这种状态执行工作。想一想搜索引擎缓存:根据昨天的缓存提供一个快速结果比给出一个缓慢的结果或根本没有结果要好。

类似的例子出现在非分布式环境中。考虑一个无锁队列:您通常不关心项目进入队列的确切顺序。所有生产者“争用”将项插入到队列后面,类似地,所有消费者“争用”使用队列的前端项。但是,只要您能够保证没有项目意外丢失或损坏,这种减少的控制级别是可以接受的。

票数 6
EN

Stack Overflow用户

发布于 2013-12-11 14:57:58

其中一种情况(至少可以认为它是一种竞赛条件,尽管这个术语在这里有争议的话)是,当线程以多种方式竞相寻找某种解决方案时,第一个得到解决方案的线程就可以结束整个算法。见例如- http://parasail-programming-language.blogspot.co.il/2010/06/intentional-race-condition-in-parasail.html

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20522076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档