C++需要线程安全的测试容器(非微软)

Vij*_*jay 2 c++ containers multithreading stl

任何人都有关于线程安全数据容器的想法,比如queue,map?当我们使用/ MT开关进行编译时,我不想要线程安全的STL.

真正的线程安全测试STL容器.

ybu*_*ill 9

线程安全容器通常没有任何意义.考虑一个'线程安全'队列:

if(!qu.empty())
{
    // 1
    qu.pop();
}
Run Code Online (Sandbox Code Playgroud)

如果在#1期间队列被修改并且它变空了怎么办?它破坏了代码.这就是为什么你应该使用锁你的代码,而不是"线程安全的"集装箱.

  • +1这是一个非常好的观点,提出你不能通过向实现添加锁定来直接使非线程安全的容器线程安全.一个线程安全的容器需要特定的设计,但是可以通过界面中的一些更改来完成:用一个`void pop(T&v)替换`top/pop`;如果队列是空的则抛出`(或返回一个布尔值),允许你测试空虚和返回/抛出,将值复制到参数并从原子上从容器中删除元素(线程和异常安全一次). (2认同)