Относительная производительность блокировок подкачки и сравнения и подкачки на x86

Две распространенные идиомы блокировки:

if (!atomic_swap(lockaddr, 1)) /* got the lock */

и:

if (!atomic_compare_and_swap(lockaddr, 0, val)) /* got the lock */

где val может быть просто константой или идентификатором нового предполагаемого владельца блокировки.

Я хотел бы знать, есть ли какая-либо значительная разница в производительности между ними на машинах x86 (и x86_64). Я знаю, что это довольно широкий вопрос, поскольку ответ может сильно различаться в зависимости от модели процессора, но это одна из причин, по которой я спрашиваю SO, а не просто выполняю тесты на нескольких процессорах, к которым у меня есть доступ.

25
задан R.. 17 March 2011 в 13:37
поделиться