У меня есть структура данных, которая не поддерживает поток. Несколько потоков считывают и записывают эту структуру данных в 2 метода. (Порядок вызовов довольно случайным образом) Мой подход к этой проблеме был использованием unique_lock, как показано ниже:C++ блокировка между методами
struct test {
void func1() {
boost::unique_lock<boost::mutex> lock(_mutex);
// modify data-structure
}
void func2() {
boost::unique_lock<boost::mutex> lock(_mutex);
// modify data-structure
}
boost::mutex _mutex;
}
Я, однако, что с этим кодом, только один поток одновременно имеет право доступа к данным, поскольку мьютекс разделяется между двумя методами.
Но каким-то образом может программа вызывает ошибку в структуры данных, которым я не в состоянии воспроизвести в моих однопоточных тестовых случаев ...
Должен ли я использовать повышение :: unique_lock в обоих методах и затем позвоните по телефону
lock()
unlock()
на это?
Вместо этого используйте ['boost :: scoped_lock'] (http://www.boost.org/doc/libs/1_61_0/doc/html/boost/interprocess/scoped_lock.html). –
Вы также можете использовать 'std :: mutex' и' std :: lock_guard' для этого случая. Нет необходимости использовать boost для всего, что находится в STL – alexeykuzmin0
@JoachimPileborg Почему это имеет значение в этом случае? 'Scoped_lock' должен быть заменен на' unique_lock'. – Jens