Gibt es einen Quasi-Standardsatz von Attributen, um die Thread-Sicherheit, Unveränderlichkeit usw. zu kommentieren?

8

Abgesehen von einem Blog-Beitrag, der hier und da die benutzerdefinierten Attribute beschreibt, die jemand erstellt hat, die jedoch keine Anziehungskraft zu haben scheinen - wie einer, der beschreibt, wie Unveränderlichkeit erzwungen wird , ein anderer , der die Sicherheit von Threads dokumentiert und die Attribute nach JCIP-Annotationen modelliert - Gibt es einen Standard, der auftaucht? Was könnte MS für die Zukunft planen?

Dies sollte Standard sein, wenn die Möglichkeit einer Interoperabilität zwischen Bibliotheken in Bezug auf die Parallelität besteht. Sowohl zu Dokumentationszwecken als auch zum Zuführen statischer / dynamischer Testwerkzeuge.

Wenn MS nichts in diese Richtung tut, könnte dies auf CodePlex geschehen - aber ich konnte dort auch nichts finden.

<opinion> Parallelität und Thread-Sicherheit sind in Imperativ- und Objektsprachen wie C # und Java sehr schwierig. Wir sollten versuchen, sie zu zähmen, bis wir hoffentlich zu geeigneteren Sprachen wechseln. </ Meinung>

Eugene Beresovsky
quelle
1
Stimmen Sie ab, um zu Programmierern zu wechseln, wie geöffnet dies beendet wurde

Antworten:

3

Das Problem sowohl bei der Unveränderlichkeit als auch bei der Gewindesicherheit besteht darin, dass es sich nicht um Schwarz-Weiß-Konzepte handelt, es gibt jedoch eine Reihe möglicher Garantien in dieser Hinsicht. Es könnte schwierig sein, dies auf einfache Attribute zu reduzieren. IMO ein einfaches ThreadSafeund ImmutableAttribut ist nicht genug. Es klingt für mich vielversprechend, immer noch eine Reihe von Attributen auszuarbeiten, die zumindest die wichtigsten Semantiken erfassen.

Nehmen Sie zum Beispiel eine AddRangeMethode. Es ist möglicherweise threadsicher genug, um den Status der zugrunde liegenden Sammlung niemals zu beschädigen, aber möglicherweise nicht atomar. Eine übliche Implementierung mit diesen Eigenschaften besteht möglicherweise darin, Addfür jedes Element eine atomare Methode aufzurufen .

Auf der Seite der Unveränderlichkeit haben wir auch verschiedene Aspekte:

  • Bietet nur schreibgeschützte Accessoren oder ändert sich wirklich nie
  • Tiefe der Unveränderlichkeit, dh auch Unterobjekte, die unveränderlich sind
  • Physische vs. logische Unveränderlichkeit. Beispielsweise ändert die verzögerte Initialisierung nicht den sichtbaren Zustand, sondern den internen Zustand.

Eine Anmerkung ist, dass dieser Kontext bereits existiert: Purefür nebenwirkungsfreie Methoden.

CodesInChaos
quelle
Ich stimme zu, dass es nicht einfach ist. Aber ich denke es sollte getan werden. Es ist zu schwierig, komplexe Software ohne sie zu erstellen, insbesondere die Integration mehrerer Bibliotheken. Vielen Dank, dass Sie auf Pure ( msdn.microsoft.com/en-us/library/… ) hingewiesen haben. Dies ist ein Anfang, und ich werde Ihre Antwort daher akzeptieren, da es die beste zu sein scheint, die wir derzeit in Bezug auf eine erhalten können "Quasi-Standard" von mindestens etwas.
0

Ich glaube nicht, dass es derzeit eine Reihe von Standards gibt (auch nicht quasi). Isolierte Projekte tun dies teilweise auf ihre eigene Weise. In einem Thread-Beitrag geht es um Unveränderlichkeit über Codeverträge und sogar um das direkte Backen in das Typensystem. Ich habe noch weniger über Thread-Sicherheit gesehen.

Kit
quelle
Wenn jedes Projekt ein eigenes System implementiert, ist es schwierig, verschiedene Bibliotheken zu integrieren und statische / dynamische Analysetools zu erstellen oder zu verwenden, um die Dinge zu überprüfen.