如果只有一个线程修改了std::vector对象,那么这个线程在读取vector对象时是否需要使用锁?



据我所知,只有当一个或多个线程正在修改一个vector时,std::vector才会发生数据竞争。如果所有线程都在简单地读,那就是线程安全的。

现在假设我有两个线程。一个只能从vector中读取,而另一个则读取并修改vector的大小。我有一个锁来保持向量的线程安全。

当只读线程从vector对象中读取数据时,它必须使用锁,因为它不知道其他线程同时在做什么。

然而,读写线程知道只读线程是只读的,因此当它读取时,其他线程只能读取或不读取。这意味着在这种情况下数据竞争是不可能的,并且它不必使用锁。

读写线程在修改vector对象时必须仍然使用该锁。

对吗?

你是正确的。如果您的单个写线程处于读模式,则不需要发生锁,因为另一个线程只是一个读线程。读者之间不能相互冲突。只读线程仍然需要在每次读时获取锁,写线程在写时需要锁,但读时不需要锁。