Я использую C #, но я работаю с неуправляемой памятью, чтобы избежать GC, чтобы перемещать память и увеличивать производительность (поэтому не фиксированную) для определенных буферов. Я нашел единственный способ применить блокированные операции к указателям C #, но у него действительно плохая производительность
Interlocked.Increment(ref *(long*)(pointer));
В C ++ у нас есть такие функции, как
long atomic_fetch_add(long * dest, long val)
или я могу найти в библиотеках Windows такие функции, как
LONG InterlockedAdd(LONG volatile *Addend, LONG Value);
но я не смог найти ни одного PInvoke, который бы позволял прямой вызов операции Atomic с использованием указателя, что привело бы к вызову с более высокой производительностью. C # будет производить вызов с низкой производительностью.
Любые мысли о том, как использовать блокировку низкого уровня, чтобы я мог что-то вроде Interlocked.Increment(pointer)
, чтобы он принимал мой указатель, а не C # ref.