1、多线程间共享数据存在什么问题?
不变式。比如:is_empty()接口返回的永远是接口是否为空。比如,size()接口返回的是这个list中的节点个数。
比如 这个双向list的每个节点都持有指向它前后节点的指针。
当多线程操作这些共享数据的时候,这个不变式有时候会遭到破坏。
比如,你在删除一个节点的时候,删除到中间的时候,这个不变式是被破坏的状态,即 某个节点持有的next实际上并不是真正的next。
这时候如果有线程闯入,读取next就会得到错误的数据。这就叫做一个race condition。
通俗点的例子就是,你要换衣服,进入换衣间,脱了旧衣服,新的还没穿好,这时候,外人如果看到,是一个尴尬的状态。
所以,这个换衣服期间,是不能被外人看见的状态。这就是一个race condition。需要锁门。
race condition定义:两个或多个线程,因为执行的操作顺序不同,导致输出结果不一致。