![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: 1 Всего: 5 |
Есть глобальная разветвленная структура, которая используется несколькими потоками. Всё синхронизируется через виндовый CRITICAL_SECTION.
Я полагаю, что использовать volatile не надо: Компилятор обязан предполагать, что LeaveCriticalSection() читает и пишет в моей глобальной структуре. Поэтому он обязан её проапдейтить перед вызовом функции и не может после вызова функции использовать любые закешированные в регистрах/стеке поля структуры. Верно? Не понятно, есть ли для компилятора разница между static и extern глобальными переменными. Например, если переменная static, то внешняя функция её не видит, значит можно оптимизировать. Но Visual C, например, так не делает:
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Нет. LeaveCriticalSection() - это всего лишь функция.
volatile очень редко, когда используется в прикладном ПО. В основном, применяется при написании системных программ - когда связь с внешним оборудованием идет через области памяти (т.е. если ты пишешь два раза подряд в одну неволатильную переменную, то компилятора может выкинуть первую запись).
на усмотрение компилятора. но по сути нет в том смысле, который ты вкладываешь в вопрос. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |