![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
угу. исходники boost всегда открыты! |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
В общем-то примерно так он и поступит, с чего ему генерировать потокобезопасный код? В большинстве случаев на современных x86 процессорах - да, операции с int могут быть атомарными, но это только по той причине, что x86 гарантирует атомарные чтение и запись (это две разные операции, не путать с операцией чтение, изменение, запись - RMW) для aligned переменных, это гарантирует, что переменная не может попасть в две разные кэш-линии, но это для x86, для любого процессора теоретически такой гарантии нет, к тому же Вы должны удостовериться, что переменная верно размещена. Естественно, они для того и созданы. Добавлено через 1 минуту и 16 секунд наверное это прозвучит нескромно, но вот тут немного написано. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
именно "могут". ибо компилятору в голову что-то взбредет, и он сгенерит такой код, который будет читать/писать его как два short`а, или даже четыре char`а. а он это может. опытным путем, я однажды доказал, что на х86 архитектуре, только операции с однобайтовыми переменными всегда атомарны. к сожалению, результаты "доказательства" привести не могу. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Если интересуют подобные вопросы, очень советую прочитать книгу The Art of Multiprocessor Programming. Алгоритм довольно простой. А что тут доказывать? если переменная попадет в две разные кэш-линии - хрен операции с ней будут атомарными. Если числовое значение адреса переменной делиться на ее размер - тогда операции с переменными вплоть до 8 байтов будут атомарными (это я про современные процессоры). Это сообщение отредактировал(а) azesmcar - 6.6.2011, 20:54 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
ну... мне в тот момент требовалось в этом удостоверится воочию. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Вот простейший алгоритм RWLock-а, если кому интересно. Пример написан на Java, но идея должна быть понятна.
Это сообщение отредактировал(а) azesmcar - 6.6.2011, 21:08 |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Совсем забыл, вот же RWLock на C++
А вот его Lock-Free аналог. Добавлено через 2 минуты и 11 секунд Кстати, вот еще на тему о RWLock-е. http://www.1024cores.net/home/lock-free-al...-writer-problem здесь проводиться тест на масштабируемость с использованием pthread_rwlock_t. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |