Os semáforos impedem a reordenação de instruções?
Eu estava procurando por um equivalente aguardável de instruções de bloqueio em c #. Algumas pessoas sugerem o uso de um binárioSemaphoreSlim
Da seguinte maneira:
await semaphore.WaitAsync().ConfigureAwait(false);
try
{
//inner instructions
}
finally
{
semaphore.Release();
}
Sei que ele tem alguns problemas (por exemplo, não é reentrante), mas minha maior preocupação é com a reordenação de instruções.
Em instruções simples e antigas de bloqueio, temos a garantia de que nenhuma instrução interna da trava será movida para fora (antes ou depois) da instrução de trava. O mesmo vale para esta solução de semáforo? Tanto quanto eu posso ver, odocumentação não menciona esse problema.