Использование boost :: bind с классом, содержащим boost :: mutex

Я работаю на сервере, используя 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 класс не копируемый, поэтому в моем не может быть мьютекса Collection класс с boost::bind требует копируемых параметров.

Мне не нравится идея статического мьютекса, потому что это было бы семантически неправильно, поскольку роль мьютекса в этом случае состоит в том, чтобы не допустить чтения моей коллекции во время ее модификации.

Что я могу сделать, чтобы решить эту проблему?

0

Решение

использование std :: ref или std :: cref вокруг мьютекса. То есть вместо:

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

записывать:

boost::mutex yourmutex;
boost::bind(..., std::ref(yourmutex), ...);
3

Другие решения

Других решений пока нет …