Здравствуйте, Алексей., Вы писали:
А>Здравствуйте, TheBeard, Вы писали:
TB>>Посмотрите InterlockedCompareExchangeю Если не подойдёт, то, видимо,
TB>>придётся использовать критические секции (если синхронизируется доступ
TB>>внутри одного процесса; для межпроцессной синхронизации потребуется Mutex).
А>То что нужно!
А>Интересно, а InterlockedCompareExchange реализована через специализированную инструкцию процессора или через EnterCriticalSection/LeaveCriticalSection?
Смотрим в kernel32.dll:
.text:7C57B5BC InterlockedCompareExchange proc near ; CODE XREF: sub_7C59933E+A5
.text:7C57B5BC
.text:7C57B5BC Destination = dword ptr 4
.text:7C57B5BC Exchange = dword ptr 8
.text:7C57B5BC Comperand = dword ptr 0Ch
.text:7C57B5BC
.text:7C57B5BC mov ecx, [esp+Destination]
.text:7C57B5C0 mov edx, [esp+Exchange]
.text:7C57B5C4 mov eax, [esp+Comperand]
.text:7C57B5C8
.text:7C57B5C8 loc_7C57B5C8: ; DATA XREF: .data:7C5CA008
.text:7C57B5C8 lock cmpxchg [ecx], edx
.text:7C57B5CC retn 0Ch
.text:7C57B5CC InterlockedCompareExchange endp
... << RSDN@Home 1.1.3 stable >>