保护Node.js中的竞争条件
我正在经历Node.js中的竞争条件,如下所示:
- 请求A到达,读取会话。
- 请求B到达,读取会话。
- 请求B修改会话,响应结束时写入会话。
- 请求A写入会话。 B的修改丢失了。
有什么办法可以解决这个问题? 我正在使用Connect与session
中间件和connect-mongo
中间件将我的会话存储在MongoDb中。 我可以根据需要修改中间件,但是我更愿意使用现有的解决scheme,因为在并发问题上我不是最有经验的程序员。
对我来说最重要的是解决scheme必须超越一个过程。 我研究过各种信号量/互斥量的可能性,但似乎没有一个可以扩展。
对于那些build议我围绕这个问题编写我的客户端代码的代码 – 围绕竞争条件编码一直是我的MO直到现在,但这导致我的代码很尴尬,容易中断。