解决的思路
我们要看到的方面在于,无论读写的线程或多或少,或先或后,最终留下来的执行路径,也只会是一条线性的路径。 而之所以引发糟糕的结果,归根结底,还是在于做事没有按照正确的顺序,试想,如果我们把“获取-检测-操作”三个步骤组装在一起,避免中途被调度,那么自然而然的,就没有这样的困扰。
拓展阅读:PostgreSQL 数据库中的事务
(PostgreSQL 中对于事务的一个案例代码 参见 www.postgresql.org/docs/curren…)
在 PostgreSQL 中,我们可以把对数据进行操作的代码,通过
BEGIN 与 COMMIT 进行包裹(这样就可以构成一个事务)
所有的事务都是原子化的(也就是说,多个操作,在组合成事务以后,就当作是一个单独的操作)
它可以有效地避免“事情做一半”的悲剧,进而提升数据管理的安全性。
这种解决问题的思路,既是线程同步问题解决思路的应用,也是一个常见的线程同步问题的场景(事务有效的让并发状态下的数据库有序处理工作)