Ich habe gerade von der Interlocked-Klasse gelernt und dass es schneller sein soll als einfach zu sperren. Nun, das ist alles schön und gut, aber ich bin neugierig auf die Umsetzung.Wie funktioniert Interlocked und warum ist es schneller als Lock?
Soweit ich weiß, ist die einzige Möglichkeit sicherzustellen, dass die Operation für eine Variable atomar ausgeführt wird, um sicherzustellen, dass nur ein Thread jederzeit auf diese Variable zugreifen kann. Welche ist gesperrt?
Ich habe Reflektor verwendet, um die Quelle von Verschlungene zu bekommen, aber es scheint, dass es externe Methode nutzt alle seine Arbeit zu tun:
[MethodImpl(MethodImplOptions.InternalCall), ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal static extern int ExchangeAdd(ref int location1, int value);
ich einige Tests ausgeführt haben, und Verschlungene in der Tat doppelt so groß ist So schnell wie einfach das Objekt sperren und inkrementieren.
Wie machen sie das?
CPU-Unterstützung .... – spender
was meinst du? –