C # Threading & Blocking [geschlossen]

8

Ich frage mich, welcher Ansatz besser ist, um Daten in einer Thread-sicheren Weise zu laden. Traditionell habe ich das Double Lock-Muster verwendet und das hat den Zweck sehr gut erfüllt. Jetzt, mit der Hinzufügung von System.Lazy Typ, frage ich mich, ob sich auf die Interna von Lazy und Loading zu verlassen, besser ist und den Job auf eine viel bessere Weise erledigt. Es sieht sauberer und einfacher zu lesen, aber ist es besser?

Irgendwelche Gedanken?

%Vor%     
Sam 10.10.2012, 01:03
quelle

2 Antworten

8
  

Es sieht sauberer und einfacher zu lesen, aber ist es besser?

Ja. Doppelt überprüfte Verriegelung ist schwer zu bekommen. Es erfordert eine Speicherbarriere, um korrekt zu sein. Ihre Implementierung wird vom CIL * nicht wirklich sicher gewährleistet.

Weitere Informationen finden Sie in diesem Wikipedia-Eintrag .

>

Wenn Sie Lazy<T> verwenden, erhalten Sie einen Code, der nicht nur sauberer ist, sondern auf allen Plattformen korrekt ist.

* Beachten Sie, dass dies aufgrund des Speichermodells der Plattform auf x86 und x64, auf denen die Microsoft-Laufzeitumgebung ausgeführt wird, wahrscheinlich einwandfrei funktioniert. Es ist jedoch nicht garantiert, dass die Spezifikation ohne geeignete Speicherbarrieren korrekt ist.

    
Reed Copsey 10.10.2012 01:08
quelle
3

Nach MSDN-Dokumentation:

  

Standardmäßig sind alle öffentlichen und geschützten Member der Lazy-Klasse Thread-sicher und können gleichzeitig von mehreren Threads verwendet werden. Diese Thread-Sicherheitsgarantien können optional und pro Instanz mithilfe von Parametern für die Konstruktoren des Typs entfernt werden.

Es ist ziemlich Thread-sicher für Lese- und Schreiboperationen. Daher würde ich sagen, bleib dabei, weil es viel sauberer ist.

Aber genau wie in der Dokumentation angegeben, können Sie diese Threadsicherheit mit einigen optionalen Parametern für den Konstruktor ausschalten.

    
Mike Perrenoud 10.10.2012 01:07
quelle

Tags und Links