Pergunta

Existe uma maneira de bloquear automaticamente um recipiente STL no acesso, sem a necessidade de bloqueio e liberação em torno dele?

Foi útil?

Solução

padrão A currrent C ++ não diz nada sobre a segurança do thread para contêineres STL. Oficialmente é possível para uma implementação STL para ser thread-safe, mas é muito incomum. Se sua implementação STL não é thread-safe, então você terá de "bloqueio e liberação em torno dele" ou encontrar alguma outra maneira de coordenar o acesso.

Você pode estar interessado em da Intel Threading Building Blocks que inclui alguns fios recipientes seguros semelhantes a contêineres STL.

Outras dicas

Depois de muito Googling, parece que a maneira de fazer isso é criar um invólucro em torno de seu recipiente. por exemplo:.

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 ...
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top