【发布时间】:2021-05-06 17:28:45
【问题描述】:
我们知道,如果多个线程对一个对象进行操作并且涉及到修改,我们需要某种锁定(原子/互斥锁)。就我而言,只有这些操作同时发生在 std::vector 上:
1. Read
2. Append/Push
在这种情况下,向量是否需要锁?如果是,为什么?我的程序是基于 CPP 的。
我是锁概念的新手。任何正确方向的提示都对我有用。
【问题讨论】:
-
追加时,可能需要重新分配。
-
追加 (push_back) 时,您需要完全锁定阻塞读取、写入和追加,因为向量的内部存储可能会被重新分配。如果您可以预先分配向量并且不在线程之间共享数组元素,则不需要锁定。
标签: c++ vector append locking push