Реализация критической секции на Interlocked.Exchange
Объясните пожалуйста, а то никак не могу врубиться, почему ежели я реализую критическую секцию используя атомарную операцию обмена, то MSDN рекомендует писать так:
if (System.Threading.Interlocked.Exchange(ref flag, 1) == 0)
{
// ...
System.Threading.Interlocked.Exchange(ref flag, 0);
}
а почему бы не написать попроще:
if (System.Threading.Interlocked.Exchange(ref flag, 1) == 0)
{
// ...
flag = 0;
}
Второй вариант правильный или нет?
(Кстати, он почти в два раза быстрее работает...
)