Следующий код содержит потенциальный тупик, но представляется необходимым: чтобы безопасно копировать данные в один контейнер из другого, оба контейнера должны быть заблокированы, чтобы предотвратить появление изменений в другом потоке.Приобретите замок на двух взаимных ошибках и избегайте взаимоблокировки
void foo::copy(const foo & rhs)
{
pMutex->lock();
rhs.pMutex->lock();
// do copy
}
У Foo есть контейнер STL и «сделать копию» по существу состоит из использования std :: copy. Как заблокировать оба мьютекса без введения тупика?
Даже как-то просто, как адреса этого против ОРЗ должно сработать. всегда запирайте сначала нижний адрес. –
Клон будет работать только в том случае, если он не будет копировать, и я не думаю, что неявное совместное использование будет работать, но я посмотрю. Интересный подход Кайл. Я не вижу недостатков. – pomeroy