Это невозможно по замыслу.
Что означает копирование мьютекса?Что он должен делать?
Скажем, вы ожидаете мьютекс A, а некоторые тела копируют мьютекс A в мьютекс B. Вы все еще ждете A или B?или для них обоих?Нет. Вы все еще должны ждать A. Таким образом, другой мьютекс B не может быть копией A. Поэтому копирование удаляется.
Операция перемещения имеет смысл, но, поскольку мьютексы расположены статически, перемещение их невозможно без изменения ихадреса - что становится кошмаром для тех, кто ждет на мьютексе.Таким образом, операция перемещения также удаляется.
Те же критерии выполняются для условных переменных.
Чтобы преодолеть эти проблемы, вы можете использовать указатели на взаимные исключения и условные переменные.Скажем, сохраните их как std::shared_ptr<std::mutex>
и std::shared_ptr<std::condition_variable>
, если вы хотите простой дизайн.