C++ 我是否需要在push_back pop_front场景中使用互斥锁锁定STL列表?
我有一个线程推回到STL列表,另一个线程从列表中弹出。在这种情况下,是否需要使用互斥锁锁定列表?可能。这些操作不够简单,不能是原子操作,因此只有在实现显式执行必要的锁定时,它们才是线程安全的C++ 我是否需要在push_back pop_front场景中使用互斥锁锁定STL列表?,c++,multithreading,stl,C++,Multithreading,Stl,我有一个线程推回到STL列表,另一个线程从列表中弹出。在这种情况下,是否需要使用互斥锁锁定列表?可能。这些操作不够简单,不能是原子操作,因此只有在实现显式执行必要的锁定时,它们才是线程安全的 但是,C++标准没有指定这些操作是否应该是线程安全的,因此取决于单个实现。检查文档。(或者让我们知道您使用的是哪种实现)不能保证STL实现是线程安全的,因为它会降低性能,我想大多数都不是。您肯定应该使用互斥体。因为stl pop/push操作是非原子的,所以您必须使用互斥体 来自: 如果多个线程访问单个容器
但是,C++标准没有指定这些操作是否应该是线程安全的,因此取决于单个实现。检查文档。(或者让我们知道您使用的是哪种实现)
不能保证STL实现是线程安全的,因为它会降低性能,我想大多数都不是。您肯定应该使用互斥体。因为stl pop/push操作是非原子的,所以您必须使用互斥体 来自: 如果多个线程访问单个容器,并且至少一个线程可能会写入,那么用户负责确保容器访问期间线程之间的互斥由于您的两个线程都修改了列表,我想您必须锁定它。大多数STL实现在sens中是线程安全的,您可以从多个线程访问列表类型的多个实例,而无需锁定。但在访问列表的同一实例时必须锁定
查看更多信息:
SGI的STL与在C++标准库中实现的STL不一样。后者不涉及并发或线程。(还有许多其他差异,尽管这些差异在这里并不相关)。但简而言之,你不能假设SGI所说的将适用于stdlib