线程同步问题(2)

46 阅读1分钟

解决的思路

我们要看到的方面在于,无论读写的线程或多或少,或先或后,最终留下来的执行路径,也只会是一条线性的路径。 而之所以引发糟糕的结果,归根结底,还是在于做事没有按照正确的顺序,试想,如果我们把“获取-检测-操作”三个步骤组装在一起,避免中途被调度,那么自然而然的,就没有这样的困扰。

输入图片说明

拓展阅读:PostgreSQL 数据库中的事务

输入图片说明 (PostgreSQL 中对于事务的一个案例代码 参见 www.postgresql.org/docs/curren…) 在 PostgreSQL 中,我们可以把对数据进行操作的代码,通过 BEGINCOMMIT 进行包裹(这样就可以构成一个事务) 所有的事务都是原子化的(也就是说,多个操作,在组合成事务以后,就当作是一个单独的操作)

它可以有效地避免“事情做一半”的悲剧,进而提升数据管理的安全性。

这种解决问题的思路,既是线程同步问题解决思路的应用,也是一个常见的线程同步问题的场景(事务有效的让并发状态下的数据库有序处理工作)