C ++ boost :: threadおよびコンテナーの自動ロック
-
22-07-2019 - |
質問
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 ...
}
所属していません StackOverflow