Frage

Gibt es eine Möglichkeit automatisch einen STL-Container für den Zugang zu sperren, ohne dass um sie zu sperren und freigeben?

War es hilfreich?

Lösung

Der currrent C ++ Standard sagt nichts über die Thread-Sicherheit für STL-Container. Offiziell ist es möglich, für eine Implementierung STL-Thread sicher zu sein, aber es ist sehr ungewöhnlich. Wenn Ihre STL-Implementierung ist nicht Thread-sicher, dann müssen Sie zu „sperren und freigeben um ihn herum“ oder einen anderen Weg finden, um den Zugang zu koordinieren.

Sie können in Intel interessiert sein Threading Building Blocks die einige Thread sichere Container ähnlich wie STL-Container enthält.

Andere Tipps

Nach vielen Googeln scheint es so, wie es zu tun ist, einen Wrapper um Ihren Container zu erstellen. z.

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 ...
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top