Компьютерная графика

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Компьютерная графика » ООП, Python, Ruby, Lua, Obj-C, Smalltalk, D » Метод reference counting в многопоточном приложении.


Метод reference counting в многопоточном приложении.

Сообщений 1 страница 3 из 3

1

Привет всем.
Решив не давно попробовать многопоточность,  я использовал несколько классов из исходников к книге "Графика трехмерной компьютерной игры на основе OpenGL". И у меня возник вопрос как синхронизировать подсчет ссылок в классе Object для нескольких потоков.  С методом retain() проблем нет там достаточно использовать windows функцию из набора Interlocked, а вот с методом  release()  проблема.
Я вижу 3 способа решения
1 Сделать метод release виртуальным и перегружать его там где это нужно.
2 Добавить в класс критическую секцию. (по мне это кажется перебор критическая секция для каждого объекта корневого класса)
3 Использовать статичную критическую секцию.

Посоветуйте что использовать или может есть другой способ?

0

2

1. А при чем тут виртуальность ?
2. Можно сделать небольшой пул критических секций (для для каждой секции хранить с каким объектом она в данный момент используется). Однако при этом сам механизм доступа к этому пулу также должен быть потоко-безопасным.
3. А для всех-ли объектов так важна потоко-безопасность. Скорее всего одновременная работа из нескольких нитей будет вестись лишь с очень небольшим числом объектов - можно ввести специальный флаг и использовать его для упрощения работы с гобъектами, которые всегда живут в одной нити.
4. Если мы начинаем работать с объектом сразу из нескольких нитей, то понадобится организовать безопасность не только для метода release

0

3

4. Если мы начинаем работать с объектом сразу из нескольких нитей, то понадобится организовать безопасность не только для метода release

В классе Object большинство полей задаётся при создании объекта и не меняются в течение всей жизни объекта, кроме счетчиков ссылок и блокировок.

3. А для всех-ли объектов так важна потоко-безопасность. Скорее всего одновременная работа из нескольких нитей будет вестись лишь с очень небольшим числом объектов - можно ввести специальный флаг и использовать его для упрощения работы с гобъектами, которые всегда живут в одной нити.

Действительно большинство объектов всегда принадлежат конкретному модулю(у меня модуль или несколько модулей строго привязываются к конкретному потоку).

Вообще очень забавный каркас выходит совершенно не похож на однопоточные :)

0


Вы здесь » Компьютерная графика » ООП, Python, Ruby, Lua, Obj-C, Smalltalk, D » Метод reference counting в многопоточном приложении.


создать форум