C ++ boost :: thread并自动锁定容器

时间:2009-10-30 05:17:09

标签: c++ stl containers boost-thread

有没有办法在访问时自动锁定STL容器,而不必锁定和释放它?

2 个答案:

答案 0 :(得分:5)

当前的C ++标准没有说明STL容器的线程安全性。正式地说,STL实现可能是线程安全的,但这是非常不寻常的。如果您的STL实现不是线程安全的,那么您将需要“锁定并释放它”或找到一些其他方式来协调访问。

您可能对英特尔的Threading Building Blocks感兴趣,其中包括一些类似于STL容器的线程安全容器。

答案 1 :(得分:2)

经过大量谷歌搜索后,似乎要做到这一点的方法是在容器周围创建一个包装器。 e.g:

template<typename T>
class thread_queue
{
private:
    std::queue<T> the_queue;
    mutable boost::mutex the_mutex;
    boost::condition_variable the_condition_variable;
public:
    void push(T const& data)
    {
        boost::mutex::scoped_lock lock(the_mutex);
        the_queue.push(data);
        lock.unlock();
        the_condition_variable.notify_one();
    }
    etc ...
}