2013-03-19 49 views
-1

我知道竞争条件的风险,并且写入或读取的值可能已损坏。我处于布尔和整数比赛以及几个类实例的情况。种族 - 条件影响

难道这会导致程序崩溃,或者对我的程序造成的其他不良影响,除了数据无效吗?我最担心的是最糟糕的吗?

我有2个版本的我的程序调试,另一个有很多优化选项。我担心这最后一个生产。

+0

请[不要将签名或标语添加到您的帖子](http://stackoverflow.com/faq#signatures)。 – meagar 2013-03-19 13:43:50

+0

没有崩溃,但产生错误的结果已经看起来像“最糟糕”给我。 – 2013-03-19 13:45:17

+0

http://www.dwheeler.com/secure-programs/Secure-Programs-HOWTO/avoid-race.html – Abhineet 2013-03-19 14:01:39

回答

3

data not being valid可能导致任何(即调用未定义行为)。因此,考虑到应用程序可能会崩溃,泄漏内存,格式化硬盘驱动器和其他任何东西。

+1

嗯,“可能导致任何事情”是“未定义的行为”。未定义的行为不会**意味着会发生令人讨厌的事情。只是它可以。 – 2013-03-19 13:39:00

+1

+1“数据”不仅仅是从文件加载的东西。 [这是一个很好的例子](http://mailinator.blogspot.co.uk/2009/06/beautiful-race-condition.html),其中一个种族破坏了哈希表的内部状态,在访问它时造成无限循环。 – shambulator 2013-03-19 13:40:23

+0

@PeteBecker现在我认为我的发言没有多大意义。将重构它。谢谢。 – 2013-03-19 13:41:14

0

难道这会导致对资源的程序崩溃

取决于正在赛跑了,但肯定的。如果一个线程抓取资源并且另一个线程需要它进展,您可能会收到未定义的行为,甚至导致程序崩溃。

对我的程序有什么其他不好的影响,除了数据无效吗?

除了无效数据(因此实际上无用的程序),你也可能容易发生死锁。

在竞赛条件下的wikipedia article是找到这些问题的答案的好地方。