Рейтинг:
1
Jochen Arndt
Почему поток должен удалять глобальный объект?
Объекты должны быть удалены только потоком-владельцем. С глобальными объектами это, вероятно, основной поток.
Поскольку он содержит мьютекс, не должно быть никакой необходимости удалять объект. Просто позвольте ему существовать в течение всего срока службы приложения.
Если вы хотите передавать динамические данные между потоками, мьютекс не должен быть частью объекта, содержащего эти данные.
Chandan_srivastava
Я не могу хранить данные в течение всего срока службы приложения. У меня есть динамические данные,которые должны быть разделены между потоками. Для синхронизации я использую мьютекс, который является частью данных. Если какой-либо поток хочет получить доступ к данным, сначала он должен получить мьютекс.
Таким образом, я обеспечиваю взаимное исключение. Но в какой-то момент данные должны быть удалены, и возникает проблема.
Jochen Arndt
Но вы должны сохранить мьютекс.
Просто переместите его из объекта данных (вы все еще можете иметь ссылку на него в объекте). Тогда у вас есть два глобала:
Мьютекс и указатель на динамический объект.
Используйте мьютекс для управления доступом к объекту, который включает создание, изменение и удаление.
Или лучше создать класс, содержащий мьютекс и динамический объект, который предоставляет все необходимые функции. Мьютекс может быть статическим (для всех экземпляров класса) или нет (один мьютекс для каждого экземпляра).
Chandan_srivastava
Спасибо, Йохен. При таком подходе мне нужно управлять этими внешне созданными мьютексами для объектов данных.