有人知道用于 c++ 的快速而肮脏的线程安全 vector 类吗?我正在对一些代码进行多线程处理,我相信我遇到的问题与 vector 的使用方式有关。我计划重写代码,但在我疯狂地重做代码之前,我想用线程安全 vector 对其进行测试以确保。我还想如果有这样的东西,它会比编写我自己的版本容易得多。
最佳答案
由于算法,这很困难。
假设您包装了 vector 以便它的所有成员函数都使用互斥体进行序列化,就像 Java 同步方法一样。然后并发调用该 vector 上的 std::remove
仍然不安全,因为他们依赖于查看 vector 并根据他们看到的内容进行更改。
因此,您的 LockingVector 需要在标准算法中专门化每个模板,以锁定整个事物。但是像 std::remove_if
这样的其他算法会在锁下调用用户定义的代码。一旦有人开始创建对象 vector ,这些对象本身在内部对所有方法进行锁定,就在幕后默默地执行此操作是锁定反转的秘诀。
回答您的实际问题:抱歉,不,我不知道。对于您需要的那种快速测试,我建议您从以下开始:
template <typename T>
class LockedVector {
private:
SomeKindOfLock lock;
std::vector<T> vec;
};
然后将其作为替换容器放入,并开始实现成员函数(以及成员 typedef 和运算符),直到它编译为止。您会很快注意到,如果您的任何代码在 vector 上使用迭代器,而这种方式根本无法从内到外实现线程安全,并且如果需要,您可以在这些情况下临时更改调用代码以锁定 vector 通过公共(public)方法。
关于c++ - C++ 的线程安全 vector 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1099513/