Frage

Does mit 2 verschiedenen Threads:

  • eine Lesung aus einem C # Array (z von der ersten Stelle), Frankreich
  • und ein weiteres Schreiben in dem gleichen C # Array aber an einen anderen Ort (z an die letzten Stelle)

ist Thread-sicher oder nicht?
(Und ich meine hier ohne Lesen noch Schreiben Verriegelung)

War es hilfreich?

Lösung

Dieser Fall ist sicher, ja.

Lesen und Schreiben auf verschiedene Teile eines Feldes stört nicht mit den anderen Operationen.

Allerdings, Lesen und an der gleichen Stelle schreiben, können Sie Probleme geben, von der Art des Elements abhängig, und die Größe der Elemente.

Andere Tipps

Ich bin nicht sicher, dass dies garantiert sicher zu sein. Stellen Sie sich vor Sie haben byte []. Diese Bytes sind eng im Speicher gepackt. Wenn Sie nun ändern diejenigen Bytes der Compiler einige der Schreib vereinigen kann Wort führen (32-Bit) sized modify Schreiboperationen lesen. Auf einigen CPUs, ARM zum Beispiel ist dies die einzige Art von Speicher Modifizieren Anweisung der Compiler hat. Dies ist besonders praktisch, wenn Sie zu einem Zeitpunkt mehr als ein Byte modifizieren. Die CPU kann auch das gleiche tun. Es kann auch Neuordnungs Sachen, ohne dass Sie es wissen. Angesichts dieser Art der Optimierung ist es möglich, für einen Thread benachbarte Speicherlese partielle Änderungen zu sehen. Sie sehen nicht, diese Art von Wirkung normalerweise, weil die Halde Allocator ist nett zu Ihnen und geben Ihnen immer Speicher zumindest Wort, das ausgerichtet ist.

Lange Rede kurzer Sinn: Ja. Solange seine an zwei verschiedenen Orten, sein eine sichere Bedienung.

Es gibt eine Diskussion über dieses war vor einer Weile, es hat einige nützliche Informationen, wenn Sie sind neugierig.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top