1、多线程间共享数据存在什么问题?

不变式。比如:is_empty()接口返回的永远是接口是否为空。比如,size()接口返回的是这个list中的节点个数。

比如  这个双向list的每个节点都持有指向它前后节点的指针。

 

当多线程操作这些共享数据的时候,这个不变式有时候会遭到破坏。

比如,你在删除一个节点的时候,删除到中间的时候,这个不变式是被破坏的状态,即 某个节点持有的next实际上并不是真正的next。

这时候如果有线程闯入,读取next就会得到错误的数据。这就叫做一个race condition。

 

通俗点的例子就是,你要换衣服,进入换衣间,脱了旧衣服,新的还没穿好,这时候,外人如果看到,是一个尴尬的状态。

所以,这个换衣服期间,是不能被外人看见的状态。这就是一个race condition。需要锁门。

 

race condition定义:两个或多个线程,因为执行的操作顺序不同,导致输出结果不一致。

posted on 2020-05-01 18:47  newbird2017  阅读(139)  评论(0编辑  收藏  举报