【发布时间】:2015-10-23 03:02:18
【问题描述】:
我有多个线程正在修改一个 stl 向量和一个 stl 列表。
如果容器是空的,我想避免锁定
下面的代码是线程安全的吗?如果 items 是列表或地图怎么办?
class A
{
vector<int> items
void DoStuff()
{
if(!items.empty())
{
AquireLock();
DoStuffWithItems();
ReleaseLock();
}
}
}
【问题讨论】:
-
感谢您的回复。为了澄清这个问题:另一个线程将添加到项目中。没有其他线程会从项目中移除——移除只会发生在 DoStuffWithItems() 内部,并且只有一个线程调用 DoStuff()。如果 items.empty() 在另一个线程添加到它时返回 false,它可以。如果 items.empty() 导致应用程序在另一个线程添加到它时崩溃,这是不行的
标签: stl thread-safety