【发布时间】:2017-08-21 09:16:23
【问题描述】:
我有一个std::vector<std::atomic<size_t>> vec。运行vec[index].fetch_add(1, std::memory_order_release) 或存储/加载多个并发线程是否安全?我认为应该是,因为读取是线程安全的,并且由于原子性,不可能同时从多个线程写入一个条目 - 对吗?
【问题讨论】:
-
如果另一个线程正在或可能正在修改您正在阅读的内容,则阅读不是线程安全的。
-
是的,但是读取也是原子性的——至少对于变量本身来说是这样。因为它在向量中,有什么不同吗?
-
您的意思是
vec[0].fetch_add(...)还是类似的?如果是这样,考虑如果另一个线程调用push_back,向量可能重新分配和移动所有元素。这不是原子的,它根本不与您的原子访问在您获取地址后停止存在的元素同步。
标签: c++ vector concurrency atomic