锁和并发是一个非常大话题,往往在实际中大家都有点敬而远之,而网上的资料,特别是某度查出来的东西就是千篇一律互相Copy,很难看到有自己的思考在里面,很少会去讲为什么使用锁。如何高效的使用锁。
某次面试面试官直接上来就说给我讲讲你满意的项目,然后就讲了之前基于Fuse写的数据去重文件。在讲的过程当中提到了使用了互斥锁pthread_mutex_lock,这个时候面试官打断了我,问到为什么要使用锁?在什么样的真实场景下需要使用锁?当时讲了两个应用同时读写一个文件,出现数据不一致。面试官强调了一下,给个实际的例子。当时没给出很实际的例子,后来面试官说我那样使用锁并不高效。
在面试过程中当中发现面试官其实非常强调合理和高效的使用锁,二面面试官当时也给出了问题,在高并发和高查询下,如何在不使用的锁的情况,完成数据更新的情况并保证不打断查询。当时给的解决方案是先将数据更新到另外一个地方,然后再将查询指向那个更新的地方,因为修改指针其实非常快。如果非要死扣细节的话,最佳应该是配合使用voilate关键字。