【发布时间】:2021-10-04 04:15:03
【问题描述】:
据我了解,只有当一个或多个线程正在修改向量时,std::vector 才会发生数据竞争。如果所有线程都在读取,那是线程安全的。
现在假设我有 2 个线程。一个只能从向量中读取,而另一个读取并修改向量的大小。我有一个锁来保持对向量的线程安全。
当只读线程从向量中读取时,它必须使用锁,因为它不知道其他线程同时在做什么。
但是,读写线程知道只读线程是只读的,因此当它正在读取时,其他线程只能读取或不读取。这意味着在这种情况下不可能发生数据争用,并且它不必使用锁。
读写线程在修改vector的时候还是要使用锁的。
是吗?
【问题讨论】:
标签: c++ multithreading vector thread-safety