c-smile wrote:
> Здравствуйте, MaximE, Вы писали:
>
>>> (свой зуб шли заказным письмом)
>
> ME>Вышлю, когда ты мне напишешь, что volatile гарантирует что все процессоры будут видеть изменения над volatile переменными без барьеров памяти.
>
> Трам-та-ра-рам, Макс, ну причем здесь volatile и процессор?
> volatile это хинт компилятору-оптимизатору не больше и не меньше.
С этим я абсолютно согласен.
> GCC и VC его могут интерпретировать по разному. Как и все остальные.
Насколько я знаю, volatile не заставляет генериться кода больше, чем нужно для зачитывания переменной из памяти (а не из регистра).
> InterlockedExchange например это intrinsic функция в VC. VC в принципе знает про архитекуру ОС и threads. Поэтому там volatile активно используется для программирования межпоточного взаимодействия. Сответсвенно все функции Interlocked* (10шт) имеют volatile аргументы.
Мои вопросы:
Как конкретно помогает volatile написанию thread safe кода?
Хотелось бы увидеть кусок кода, который испрользует Interlocked* ф-ции для изменения глобальной переменной, разделяемой между потоками, и который не работал бы если переменная не volatile. Для чистоты эксперимента, объявить ф-ции Interlocked* или скопировать их реализацию без volatile.
--
Maxim YegorushkinPosted via RSDN NNTP Server 1.9