Chandan_srivastava Ответов: 1

Уничтожение глобального объекта


I have a global object which is shared by different threads. To provide the synchronization, I have added a mutex inside the global object.
Mutex will be locked by a thread before accessing the data inside the object.
Everything is fine except delete.
If a thread is locking the mutex and deleting the object.
How again it can unlock it?

How can a safe delete be implemented using this approach i.e. keeping mutex inside the object?


Что я уже пробовал:

Я не уверен, что может быть решением.

1 Ответов

Рейтинг:
1

Jochen Arndt

Почему поток должен удалять глобальный объект?

Объекты должны быть удалены только потоком-владельцем. С глобальными объектами это, вероятно, основной поток.

Поскольку он содержит мьютекс, не должно быть никакой необходимости удалять объект. Просто позвольте ему существовать в течение всего срока службы приложения.

Если вы хотите передавать динамические данные между потоками, мьютекс не должен быть частью объекта, содержащего эти данные.


Chandan_srivastava

Я не могу хранить данные в течение всего срока службы приложения. У меня есть динамические данные,которые должны быть разделены между потоками. Для синхронизации я использую мьютекс, который является частью данных. Если какой-либо поток хочет получить доступ к данным, сначала он должен получить мьютекс.
Таким образом, я обеспечиваю взаимное исключение. Но в какой-то момент данные должны быть удалены, и возникает проблема.

Jochen Arndt

Но вы должны сохранить мьютекс.

Просто переместите его из объекта данных (вы все еще можете иметь ссылку на него в объекте). Тогда у вас есть два глобала:
Мьютекс и указатель на динамический объект.

Используйте мьютекс для управления доступом к объекту, который включает создание, изменение и удаление.

Или лучше создать класс, содержащий мьютекс и динамический объект, который предоставляет все необходимые функции. Мьютекс может быть статическим (для всех экземпляров класса) или нет (один мьютекс для каждого экземпляра).

Chandan_srivastava

Спасибо, Йохен. При таком подходе мне нужно управлять этими внешне созданными мьютексами для объектов данных.