C ++ boost :: thread и автоматическая блокировка контейнеров - PullRequest
3 голосов
/ 30 октября 2009

Существует ли способ автоматической блокировки контейнера STL при доступе без необходимости блокировать и отпускать его?

Ответы [ 2 ]

5 голосов
/ 30 октября 2009

Текущий стандарт C ++ ничего не говорит о безопасности потоков для контейнеров STL. Официально реализация STL может быть поточно-ориентированной, но это очень необычно. Если ваша реализация STL не является поточно-ориентированной, вам нужно будет «заблокировать и разблокировать ее» или найти какой-то другой способ координировать доступ.

Возможно, вас заинтересуют многопоточные строительные блоки Intel , которые включают в себя несколько потоковобезопасных контейнеров, подобных контейнерам STL.

2 голосов
/ 30 октября 2009

После долгих поисков в Google, кажется, способ сделать это - создать оболочку вокруг контейнера 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 ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...