Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Нужен ли барьер памяти и как его реализовать? / 8 сообщений из 8, страница 1 из 1
21.12.2013, 23:06:38
    #38509014
AYTereschenko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен ли барьер памяти и как его реализовать?
Пишу небольшой эмулятор виртуального компьютера. Часть его памяти отведена под видеобуфер. Собственно, код эмулятора выполняется в одном потоке, а в другом потоке содержимое этого видеобуфера периодически выводится на экран. Я правильно понимаю, что для того, чтобы на экран выводилось всегда актуальное состояние видеобуфера, нужно гарантировать, чтобы к моменту отрисовки никакие данные, записанные в область памяти видеобуфера первым потоком эмулятора, не остались закешированными? Т.е. надо барьер памяти вставить перед отрисовкой? Как это сделать в данном случае и можно ли сбрасывать кеш только для определенного участка памяти, или барьер памяти в принципе весь кеш процессора сбрасывает?
Если просто какую-нибудь volatile переменную завести и записывать в нее что-нибудь перед каждой прорисовкой видеобуфера, то это поможет?
...
Рейтинг: 0 / 0
21.12.2013, 23:46:15
    #38509030
cdtyjv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен ли барьер памяти и как его реализовать?
AYTereschenko,
Чтобы видеть актуальное состояние нужно, что бы между двумя операциями было happens-before. Соответственно, через volatile нужно, что бы вы в пишущем потоке писали в него, а в читающем - читали из него. Но там надо быть очень осторожным, если вам нельзя видеть промежуточные значения.
...
Рейтинг: 0 / 0
22.12.2013, 01:15:52
    #38509057
AYTereschenko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен ли барьер памяти и как его реализовать?
cdtyjv,
ну ок, значит volatile не годится, потому что в эмулирующем потоке я не знаю, когда наступает момент вывода изображения на экран. чем еще можно создать happens-before в такой ситуации?
...
Рейтинг: 0 / 0
22.12.2013, 01:38:23
    #38509062
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен ли барьер памяти и как его реализовать?
Обычно видеопамять состоит из 2х буферов. Front/Back. Пока ты рисуешь в back - front отображается
пользователю. После того как back отрисован они меняются местами.
...
Рейтинг: 0 / 0
22.12.2013, 01:42:23
    #38509063
AYTereschenko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен ли барьер памяти и как его реализовать?
mayton,
да, конечно, но в данном конкретном случае никаких front/back нет. есть одна непрерывная область памяти, часть которой рассматривается как видеобуфер и выводится на экран, как это было в большинстве старых архитектур.
...
Рейтинг: 0 / 0
22.12.2013, 10:15:33
    #38509132
cdtyjv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен ли барьер памяти и как его реализовать?
AYTereschenko,
Может быть вам подойдет ReadWriteLock (или StampedLock в будущей Java8).
...
Рейтинг: 0 / 0
24.12.2013, 15:09:40
    #38511193
AYTereschenko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен ли барьер памяти и как его реализовать?
cdtyjvAYTereschenko,
Может быть вам подойдет ReadWriteLock (или StampedLock в будущей Java8).
А как именно здесь можно применить RWL? В основном эмулирующем потоке мне не известны моменты времени, когда второй поток выводит картинку на экран. Постоянно проверять какой-нибудь флажок тоже не вариант, т.к. это сильно замедлит скорость эмуляции.
...
Рейтинг: 0 / 0
24.12.2013, 15:44:01
    #38511229
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен ли барьер памяти и как его реализовать?
AYTereschenkomayton,
да, конечно, но в данном конкретном случае никаких front/back нет. есть одна непрерывная область памяти, часть которой рассматривается как видеобуфер и выводится на экран, как это было в большинстве старых архитектур.
В настолько старых архитектурах никаких барьеров небыло. Поэтому не совсем понятно с чем боремся? Все прямые изменения в видео-буфере всегда видны при отрисовке, если иного не предусмотрено железкой.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Нужен ли барьер памяти и как его реализовать? / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]