问题解决方法及同步和一致性
在阅读APUE(第三版)的12.9线性和fork时,读的云里雾里,怎么都读不懂,本打算像以前一样,读不懂就算了,过。可以这次实在憋得慌,于是问了自己如下这个问题
即使读不懂,那么在这种情况下,能不能尽量理解一些呢?
记得以前看过学习知识要问自己三个W,What, Why, How。好吧,就问问自己这一节讲的是什么。
这一节讲的是什么呢?主题是什么?
再次浏览,提炼出了如下主题
线程在使用Fork后,会导致子进程与进程中互斥量,读写锁和条件变量不一致的问题。(注意,在提炼主题过程中,往往会遇到某些关键词不懂,这没关系,这一步最重要的是找出主题句)
之后,仔细阅读主题句,找出那些你不理解的词,往往是一些关键词导致对整节内容的不明白。下一步就很明确了,理解关键词的意思。这里对我来说是关键词是一致
说到一致,又想起来一起类似的与之相关的词,同步,异步,原子性,数据一致性,事务处理等等,我发现,自己不仅仅是对一致这个概念不清楚,而且对其它相关概念也一直是模棱两可,而正是这种模棱两可是自己学习新知识的障碍,是需要自己重点花力气解决的东西。
那么,什么是一致呢?
说到一致,往往说的是保持某某一致,如保持数据一致,并且基本有这样一个背景——多个操作同时修改一个数据。举个例子,多个线程同时修改一个变量,可能最后变量的值并非正确的。这时可以说变量没有保持一致性。
一致这个词的英文是cohere,有如下两个解释
- hold firmly together;form a whole
- (of an argument or theory) be logically consistent.
我觉得大致可理解为保持一个事物的整体性。在计算机中,当多个线程同时更改一个变量时,因为修改是分步的,所以如果不采取相关措施,就可以破坏变量的整体性。导致不一致的问题。
那么,12.9线程和fork中谈及的锁一致又具体指什么呢?
应该指的是锁的获取与释放的整体性,对锁来说,获取与释放必须是成对的操作,可以说这种成对的操作具有某种整体性,如果获取了但不释放,那么就破坏了这种整体性,锁的状态包括加锁和解锁,如果整体性被破坏,就可以说锁的状态不一致。
还有另一个经常提到的概念同步,同步与一致有什么区别?
可以这样看待,一致指的是被操作对象的属性,而同步指的是,为了保证被操作对象的一致性操作者所应该具有的属性。