Re[4]: Fixed: Interlocked Circle Buffer
От: Jolly Roger  
Дата: 08.03.10 03:47
Оценка:
Здравствуйте, Caracrist, Вы писали:

C>Потестировал всё это дело на скорость... Быстре просто лочить по тупому и всё.

C>Interlocked быстрее только если буфер маленький относительно количества потоков, а операция копирования дорогая...

C>Вывод: лочить простым мутексом и копировать указатели. Меньше шансов на баги и производительность супер.


Преимущество lock-free не в скорости лока, а в отсутствии ожидания потоков друг друга. Напимер код

EnterCriticalSection
a++;
LeaveCriticalSection


на x86 всего лишь в два раза медленнее, чем InterlockedIncrement, даже без spincount, но только если секция в момент захвата свободна. Если же потоки часто "пересекаются" на общем ресурсе, то lock-free даст лучшую производительность системы за счёт отсутствия ожидания потоками доступа к ресурсу, в том числе и за счёт уменьшения переключений контекстов потоков. Последнее, правда, можно несколько снивелировать, предваряя усыпление потока spin-lock'ом.
"Нормальные герои всегда идут в обход!"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.