C++多线程-CH3 Sharing Data between threads

2021-02-01 03:16

阅读:677

标签:一个   返回   需要   双向   empty   多线程操作   bsp   共享数据   tween   

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

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

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

 

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

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

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

 

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

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

 

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

C++多线程-CH3 Sharing Data between threads

标签:一个   返回   需要   双向   empty   多线程操作   bsp   共享数据   tween   

原文地址:https://www.cnblogs.com/buddho/p/12814347.html


评论


亲,登录后才可以留言!