Две общие идиомы блокировки:
if (!atomic_swap(lockaddr, 1)) /* got the lock */
и
if (!atomic_compare_and_swap(lockaddr, 0, val)) /* got the lock */
где val
может просто быть константой или идентификатором для нового потенциального владельца блокировки.
То, что я хотел бы знать, заключается в том, имеет ли какая-либо значительная разница в производительности между этими двумя машинами x86 (и x86_64). Я знаю, что это довольно широкий вопрос, поскольку ответ может сильно различаться между отдельными моделями процессора, но эта часть причины, о которой я спрашиваю, а не просто делать тесты на нескольких процессорах, к которым у меня есть доступ.