C++ boost::thread and automatically locking containers

我们两清 提交于 2019-12-13 15:08:14

问题


Is there a way to automatically lock an STL container on access, without having to lock and release around it?


回答1:


The currrent C++ standard does not say anything about thread safety for STL containers. Officially it is possible for an STL implementation to be thread safe, but it's very unusual. If your STL implementation is not thread safe, then you will need to "lock and release around it" or find some other way to coordinate access.

You may be interested in Intel's Threading Building Blocks which includes some thread safe containers similar to STL containers.




回答2:


After much Googling, it seems the way to do it is to create a wrapper around your container. 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 ...
}


来源:https://stackoverflow.com/questions/1648127/c-boostthread-and-automatically-locking-containers

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!