以非线程安全方式调用 vector::size / map::size 有什么影响?
What are the implications of calling vector::size / map::size in a non-thread-safe manner?
据我所知,map::size
和 vector::size
,而 const
不能保证线程安全。我发现 vector
的一种实现如下所示:
size_type size() const _NOEXCEPT
{return static_cast<size_type>(this->__end_ - this->__begin_);}
如果我以非线程安全的方式调用此方法,会出现什么问题?简单地说,返回的结果可能会过时几毫秒,或者它是否会破坏其他线程修改集合的尝试或以其他方式冒严重问题的风险?
If I call this method in a non-thread-safe way, what could go wrong?
如果在没有同步的情况下在另一个线程中修改向量,则程序的行为将是不确定的。什么事都有可能发生。
可能会出什么问题?
向向量中添加元素可能会导致重新分配并使所有迭代器无效。如果在您对 begin
和 end
的查询之间发生了重新分配,那么它们之间的差异将是乱码。
据我所知,map::size
和 vector::size
,而 const
不能保证线程安全。我发现 vector
的一种实现如下所示:
size_type size() const _NOEXCEPT
{return static_cast<size_type>(this->__end_ - this->__begin_);}
如果我以非线程安全的方式调用此方法,会出现什么问题?简单地说,返回的结果可能会过时几毫秒,或者它是否会破坏其他线程修改集合的尝试或以其他方式冒严重问题的风险?
If I call this method in a non-thread-safe way, what could go wrong?
如果在没有同步的情况下在另一个线程中修改向量,则程序的行为将是不确定的。什么事都有可能发生。
可能会出什么问题?
向向量中添加元素可能会导致重新分配并使所有迭代器无效。如果在您对 begin
和 end
的查询之间发生了重新分配,那么它们之间的差异将是乱码。