genom
|
нап-гедонист
|
|
|
|
Рег.: 28.12.2005
|
Сообщений: 1762
|
|
Рейтинг: 1378
|
|
[c] volatile objects accessing
21.12.2009 23:17
|
|
|
Вопросы по обращениям к volatile - переменным
По стандарту 1) компилятор имеет право переставлять обращения к разным volatile переменным? 2) компилятор имеет право переставлять обращение volatile переменной и запись в "обычную" переменную?
курил стандарт, но не могу докурить...( (возможно, отчасти из-за недостаточного знания английского)
там написано, что expression reffering to such an object (volatile то бишь) должны вычисляться строго в сответсвии с abstract semantic, а по abstract semantic все обращения к volatile-переменным, записи во все переменные oбъявляются как имеющие side effect (и =>, как я понимаю, не могут быть переставлены). Но в то же время, сказано, что actual semantic (то бишь, то, что позволено делать копмилятору) может отличаться от abstract (но должна совпадать на вызовах, пересекающих compilation unit boundaries и еще где-то). Ну а если речь просто о последовательном коде внутри одной функции, то какие будут ответы на первые два вопроса?
|
Holy fuck that was great holy god fuck shit balls |
|
monoid
|
|
|
|
|
Рег.: 14.02.2004
|
Сообщений: 1689
|
Из: ГЗ::Б::12
|
Рейтинг: 1331
|
|
Re: [c] volatile objects accessing
[re: genom]
22.12.2009 01:09
|
|
|
|
blind
|
still alive
|
|
|
|
Рег.: 16.01.2004
|
Сообщений: 23128
|
Из: Хамовники
|
Рейтинг: 16483
|
|
Re: [c] volatile objects accessing
[re: monoid]
22.12.2009 09:22
|
|
|
В ответ на:
2) да
даже если он не уверен что они не алиасятся? как же тогда барьеры работают? #define mb() asm volatile ("": : :"memory")
|
13/37 =) |
|
monoid
|
|
|
|
|
Рег.: 14.02.2004
|
Сообщений: 1689
|
Из: ГЗ::Б::12
|
Рейтинг: 1331
|
|
Re: [c] volatile objects accessing
[re: blind]
22.12.2009 10:41
|
|
|
Для "обычных переменных", а не объектов, доступных через указатель, проблема алиасинга не стоит. Хотя, конечно, мне стоило сразу об этом написать. И, кстати, не факт, что разыменование volatile int* в C является барьером - из-за type-based pointer disambiguation.
|
# |
|
horror
|
гонобобель
|
|
|
|
Рег.: 30.09.2002
|
Сообщений: 3784
|
|
Рейтинг: 2137
|
|
Re: [c] volatile objects accessing
[re: genom]
22.12.2009 14:00
|
|
|
Quote:
По стандарту 1) компилятор имеет право переставлять обращения к разным volatile переменным? 2) компилятор имеет право переставлять обращение volatile переменной и запись в "обычную" переменную?
интуитивный ответ 1) да 2) да не вижу препон, буду рад услышать обоснованные опровержения моего необоснованного мнения
|
|
monoid
|
|
|
|
|
Рег.: 14.02.2004
|
Сообщений: 1689
|
Из: ГЗ::Б::12
|
Рейтинг: 1331
|
|
Re: [c] volatile objects accessing
[re: horror]
22.12.2009 14:08
|
|
|
Quote:
1) да
неопределенность в порядке доступа к volatile объектам есть только между sequence points
|
# |
|
genom
|
нап-гедонист
|
|
|
|
Рег.: 28.12.2005
|
Сообщений: 1762
|
|
Рейтинг: 1378
|
|
Re: [c] volatile objects accessing
[re: monoid]
22.12.2009 22:29
|
|
|
спс, а вот насчет второго вопроса это в стандарте явно где-то написано?
потому что я пока не понял, если опираться только на стандарт, то ли он это явно разрешает , то ли об этом умалчивает (типа implementation defined) и де-факто некоторые компиляторы переставляют (кстати, такие компиляторы есть? т.е. пример иходника, компилятора и чтобы в ассемблере было видно что обращения переставились)
Самое, как мне кажется, близкое из стандарта, что я нашел: The least requirements on a conforming implementation are: - At sequence points, volatile objects are stable in the sense that previous accesses are complete and subsequent accesses have not yet occurred. ...
но тут ничего не говорится про не volatile objects...
|
Holy fuck that was great holy god fuck shit balls |
|
Grig
|
Carpal Tunnel
|
|
|
|
Рег.: 03.02.2004
|
Сообщений: 5344
|
Из: Глубокое замкадье
|
Рейтинг: 7053
|
|
Re: [c] volatile objects accessing
[re: genom]
22.12.2009 22:39
|
|
|
На твои вопросы действительно краткие ответы будут 1) нет 2) да Категорически рекомендую прочитать статью
C++ and the Perils of Double-Checked Locking Scott Meyers and Andrei Alexandrescu September 2004 http://www.aristeia.com/Papers/DDJ_Jul_Aug_2004_revised.pdf
Там как раз про гарантии стандарта по поводу порядка доступа и volatile
|
|
genom
|
нап-гедонист
|
|
|
|
Рег.: 28.12.2005
|
Сообщений: 1762
|
|
Рейтинг: 1378
|
|
Re: [c] volatile objects accessing
[re: Grig]
22.12.2009 22:59
|
|
|
да , мне судя по всему нужны какие-нибудь "комментарии"
спс за ссылку, ща почитаю...
|
Holy fuck that was great holy god fuck shit balls |
|
vozbu
|
karamba
|
|
|
|
Рег.: 14.11.2004
|
Сообщений: 4856
|
|
Рейтинг: 1057
|
|
Re: [c] volatile objects accessing
[re: Grig]
25.12.2009 10:51
|
|
|
В ответ на:
C++ and the Perils of Double-Checked Locking Scott Meyers and Andrei Alexandrescu September 2004 http://www.aristeia.com/Papers/DDJ_Jul_Aug_2004_revised.pdf
Спасибо. Каждый раз читаю что-то подобное и удивляюсь, как программы на C/C++ вообще работают.
|
С тех пор, как изобрели речь, люди не могут договориться друг с другом.
|
|
blind
|
still alive
|
|
|
|
Рег.: 16.01.2004
|
Сообщений: 23128
|
Из: Хамовники
|
Рейтинг: 16483
|
|
Re: [c] volatile objects accessing
[re: vozbu]
25.12.2009 11:06
|
|
|
ты много знаешь программ (особенно на c++) где активно используется самодельная синхронизация?
|
13/37 =) |
|
vozbu
|
karamba
|
|
|
|
Рег.: 14.11.2004
|
Сообщений: 4856
|
|
Рейтинг: 1057
|
|
Re: [c] volatile objects accessing
[re: blind]
25.12.2009 12:16
|
|
|
В смысле, межпотоковая, не используя библиотеки типа pthreads? Не знаю ни одной. А это меняет суть дела?
|
С тех пор, как изобрели речь, люди не могут договориться друг с другом.
|
|
blind
|
still alive
|
|
|
|
Рег.: 16.01.2004
|
Сообщений: 23128
|
Из: Хамовники
|
Рейтинг: 16483
|
|
Re: [c] volatile objects accessing
[re: vozbu]
25.12.2009 12:42
|
|
|
такие библиотеки пишут и тестируют умные люди
|
13/37 =) |
|
vozbu
|
karamba
|
|
|
|
Рег.: 14.11.2004
|
Сообщений: 4856
|
|
Рейтинг: 1057
|
|
Re: [c] volatile objects accessing
[re: blind]
25.12.2009 13:28
|
|
|
Ты, ээ, читал указанный документ? Я не понимаю, чего ты привязался к этим библиотекам. Использовать "крутую" библиотеку не значит написать работающей программы.
|
С тех пор, как изобрели речь, люди не могут договориться друг с другом.
|
|
blind
|
still alive
|
|
|
|
Рег.: 16.01.2004
|
Сообщений: 23128
|
Из: Хамовники
|
Рейтинг: 16483
|
|
Re: [c] volatile objects accessing
[re: vozbu]
25.12.2009 14:56
|
|
|
конечно нет
правильно использовать правильную библиотеку значительно проще
|
13/37 =) |
|
Fj_
|
Carpal Tunnel
|
|
|
|
Рег.: 12.09.2004
|
Сообщений: 8795
|
|
Рейтинг: 3287
|
|
Re: [c] volatile objects accessing
[re: blind]
26.12.2009 01:48
|
|
|
"конечно нет" видимо относится к вопросу "Ты, ээ, читал указанный документ?"
Ты знаешь какую-нибудь библиотеку для плюсов, предоставляющую lightweight инициализацию синглтонов?
|
The data is the error (c)IIS FTP Server. |
|
blind
|
still alive
|
|
|
|
Рег.: 16.01.2004
|
Сообщений: 23128
|
Из: Хамовники
|
Рейтинг: 16483
|
|
Re: [c] volatile objects accessing
[re: Fj_]
26.12.2009 10:18
|
|
|
да
не знаю. проблема чтоб сделать это без лока когда его создавать ломится куча трэдов?
|
13/37 =) |
|