【发布时间】:2015-12-13 19:54:50
【问题描述】:
我对 Web 开发还很陌生。从我读到的关于竞争条件的内容中,我认为使用节点或 JS 是不可能的,因为它是单线程的,但我认为那是……我猜错了。有人可以通过这个小例子解释它是如何工作的。
如果有一个银行账户,里面有 1000 美元,并且两个人在同一秒同时访问服务器,从该账户中扣款。第一个人收费 600 美元,第二个人收费 200 美元。
第一次收费为 1000 美元 - 600 美元,余额为 400 美元。 但是由于第二次收费是在同一时间发生的,所以它会产生 1000 美元到 200 美元的费用,而余额则为 800 美元。显然现在余额应该是 200 美元。
据我了解,这会导致竞争条件,不是吗?你将如何设置它来避免这个问题?我不需要确切的代码,也许有人向我解释一下,或者伪代码。
提前致谢。
编辑:我将对其进行编辑,以了解如何设置最初导致竞争条件的代码。
就像下面的帖子所说的那样。将设置代码,以便当账户被击中时,它会减去金额并给出新的余额。显然这会导致竞态条件。
【问题讨论】:
-
您需要考虑您正在使用的数据库以及您如何编写 SQL 语句。请参阅以下(上一个)答案:stackoverflow.com/questions/22561241/…
-
那么MongoDB数据库不适合这种类型的事情吗?
标签: javascript node.js race-condition single-threaded