Question

Y a-t-il un moyen de verrouiller automatiquement un conteneur STL sur l'accès, sans avoir à verrouiller et libérer autour de lui?

Était-ce utile?

La solution

La norme actuelle C ++ ne dit rien sur la sécurité des threads pour les conteneurs STL. Officiellement, il est possible qu'une implémentation STL soit thread-safe, mais c'est très inhabituel. Si votre implémentation STL n'est pas thread-safe, vous devrez alors "verrouiller et relâcher autour de celle-ci". ou trouver un autre moyen de coordonner l'accès.

Vous pourriez être intéressé par les Building Blocks d'Intel, qui incluent des conteneurs sécurisés pour les threads similaires aux conteneurs STL.

Autres conseils

Après beaucoup de recherches sur Google, il semble que le moyen de le faire est de créer une enveloppe autour de votre conteneur. par exemple:

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 ...
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top