質問

STLコンテナーをアクセス時に自動的にロックする方法はありますか?

役に立ちましたか?

解決

現在のC ++標準では、STLコンテナのスレッドセーフについては何も言及されていません。公式には、STL実装をスレッドセーフにすることは可能ですが、それは非常に珍しいことです。 STL実装がスレッドセーフでない場合は、「ロックしてリリースする」必要があります。またはアクセスを調整する他の方法を見つけます。

Intelの Threading Building Blocks に興味があるかもしれません。これには、STLコンテナに類似したスレッドセーフコンテナが含まれています。

他のヒント

多くのグーグルで調べた後、それを行う方法は、コンテナの周りにラッパーを作成することです。例:

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 ...
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top