0

私はwatchdirを使用してサーバーで作業しており、内部コレクションにアイテムを追加しています。watchdirは、次のように作成されたスレッドによって定期的に参照されます。

this->watchDirThread = new boost::thread(boost::bind(&Filesystem::watchDirThreadLoop,
                                                      this,
                                                      this->watchDir,
                                                      fileFoundCallback));

fileFoundCallbackパラメータは、次の方法でも作成されboost::bindます。

boost::bind(&Collection::addFile, this->collection, _1)

ミューテックスを使用した同時アクセスからコレクションを保護したいのですが、クラスがコピーできないため、コピー可能なパラメーターが必要なため、クラスboost::mutexにミューテックスを含めることができないという問題があります。Collectionboost::bind

ここでのミューテックスの役割は、コレクションの変更中にコレクションが読み取られないようにすることであるため、静的ミューテックスのアイデアは意味的に間違っているため、私は好きではありません。

この問題を解決するにはどうすればよいですか?

4

1 に答える 1

3

ミューテックスの周囲でstd::refまたはstd::crefを使用します。つまり、次の代わりに:

boost::mutex yourmutex;
boost::bind(..., yourmutex, ...);

書きます:

boost::mutex yourmutex;
boost::bind(..., std::ref(yourmutex), ...);
于 2012-12-21T09:49:57.560 に答える