3

アクセス時に STL コンテナーを自動的にロックする方法はありますか? ロックして解放する必要はありません。

4

2 に答える 2

5

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

STL コンテナーに似たスレッドセーフなコンテナーを含むIntel のThreading Building Blocksに興味があるかもしれません。

于 2009-10-30T05:32:37.530 に答える
2

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

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 ...
}
于 2009-10-30T05:42:16.967 に答える