- 主题:Qt 的 cow 其实不是线程安全的对吧。
不会失败
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 比如我有个
: QList data;
: 进程 A 正在执行:
: ...................
--
FROM 117.64.229.*
构造时不能有别的线程同时使用
detach时可以其他线程同时使用,基于引用计数实现
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 为什么呢?
: 我看了一下源代码,QSharedData::detach() 和 QList 的复制构造函数都没有加锁的代码啊。
--
FROM 117.64.229.*
另外一个线程插入数据前 要先detach
等于两个线程同时从原来的d里复制数据出来,所以线程安全
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 引用计数本身是 atomic,所以没问题。
: 但 detach() 时要做一次复制啊。这个复制如果碰到另外一个线程正在插入数据,那怎么办?
--
FROM 117.64.229.*
只有两个线程同时修改时才可能会多复制、删除数据
概率不大
【 在 dormouseBHU (dormouseBHU) 的大作中提到: 】
: 确实线程安全,但是多复制了一遍数据,还多删除了一遍数据,感觉碰到这个场景,效率很低啊。
--
FROM 60.168.247.*