Je přiřazení atomická operace?
Zapojil jsem do poněkud vášnivější debaty na téma, zda je v C# přirazení (=) atomická operace, nebo ne. Já jsem toho názoru, že není, protože jsou na jeho provedení potřeba dvě IL instrukce, jiní jsou ovšem toho názoru, že přiřazení atomická operace je, protože v každém okamžiku obsahuje proměnná na levé straně operátoru platnou hodnotu (null v to počítaje).
Co si o tom myslíte vy?
Pro ilustraci příklad zdrojového kódu v C# a příslušného IL kódu (odpovídající si části jsem zvýraznil):
private static void Main()
{
object a = new object();
object b = a;
}
.method private hidebysig static void Main() cil managed
{
.custom instance void [mscorlib]System.STAThreadAttribute::.ctor()
.entrypoint
.maxstack 1
.locals init (
[0] object a,
[1] object b)
L_0000: nop
L_0001: newobj instance void [mscorlib]System.Object::.ctor()
L_0006: stloc.0
L_0007: ldloc.0
L_0008: stloc.1
L_0009: ret
}