Blubb blubb zu thread safety in der MSDN



  • Die Muster der Zugriffssicherung beim Parallel Procesising sind eigentlich ziemlich einheitlich, auch wenn die genaue Anwendung der Techniken deutlich variiert.



  • Die Formulierung ist äusserst unglücklich.

    Ich gehe aber davon aus dass "N reader ODER 1 writer" gemeint ist. Sollte in der Tat "N reader + 1 writer" gemeint sein ist die Formulierung doppelt unglücklich, da ein wichtiges Feature quasi unterschlagen wird.

    @Optimizer: taucht diese Formulierung öfters auf, oder nur bei dieser einen Klasse? Unabhängig davon könntest du aber MS anschreiben, dass die das fixen sollen bzw. klarstellen.



  • Sobald 1 Writer ("any write operations", d.h. >= 1) zugreift, muß man synchronisieren, d.h. braucht einen Interlock mit den Readern und anderen Writern. Solange es nur n Reader sind, ist kein Interlock notwendig.

    Das steht doch da? 😕

    Die Variante (2) wird von "any write operations" verworfen.



  • hustbaer schrieb:

    @Optimizer: taucht diese Formulierung öfters auf, oder nur bei dieser einen Klasse? Unabhängig davon könntest du aber MS anschreiben, dass die das fixen sollen bzw. klarstellen.

    Ja, is einer von den möglichen Standard-Sätzen die sie da verwenden. Ich konnte aber keine zusammenfassende Seite über diese Sätze finden.

    Marc++us schrieb:

    Sobald 1 Writer ("any write operations", d.h. >= 1) zugreift, muß man synchronisieren, d.h. braucht einen Interlock mit den Readern und anderen Writern. Solange es nur n Reader sind, ist kein Interlock notwendig.

    Das steht doch da? 😕

    Die Variante (2) wird von "any write operations" verworfen.

    Also du vermutest gleichzeitig lesen und schreiben geht nicht. Und du vermutest es im speziellen deshalb, nicht weil es häufig einfach so ist, sondern weil du genau diesen Text so verstehst, oder? Alles klar, das wollte ich wissen. 🙂

    Ich glaube es inzwischen auch, nicht nur weil es das offensichtlichere ist, sondern weil ich seltsame internal-index-corrupted Fehler habe. Ich hab mir gedacht, probieren geht über studieren. 🕶 👍

    Aber ich finde die Formulierung nicht genauso klar. So ist das Verhalten ja dann identisch mit der List<T>, da steht aber:

    Public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

    A List can support multiple readers concurrently, as long as the collection is not modified.

    Was ich mal wirklich eindeutig finde.



  • 😕

    A List (Type) can support multiple readers concurrently, as long as the collection is not modified.

    <=>

    This type is safe for multithreaded read operations. You must synchronize any write operations.

    Oder so:

    can support <=> is safe
    concurrently <=> multithreaded
    multiple readers <=> read operations
    as long as not modified <=> when write operations must do something (synchronize)
    modified <=> write operation

    Entweder fehlt mir die Phantasie, oder ich lese das identisch.



  • Die Formulierung ist nicht eindeutig, da die Möglichkeit dass evtl. jmd lesen UND schreiben möchte nicht berücksichtigt wird -- bzw. es wird keine Aussage darüber getroffen was dann zu tun ist. Mit der nötigen Erfahrung lässt sich schnell erraten was wohl gemeint ist, rein aus sprachlicher Ebene ist das aber so unklar wie nur geht.



  • hustbaer schrieb:

    Die Formulierung ist nicht eindeutig, da die Möglichkeit dass evtl. jmd lesen UND schreiben möchte nicht berücksichtigt wird

    Doch. "any write operations" bedeutet >= 1. Damit wird ausgesagt, daß man synchronisieren muß, sobald mindestens 1 Write-Operation stattfindet, egal ob parallel zu anderen Write-Operations oder zu Read-Operations.



  • Marc++us schrieb:

    hustbaer schrieb:

    Die Formulierung ist nicht eindeutig, da die Möglichkeit dass evtl. jmd lesen UND schreiben möchte nicht berücksichtigt wird

    Doch. "any write operations" bedeutet >= 1. Damit wird ausgesagt, daß man synchronisieren muß, sobald mindestens 1 Write-Operation stattfindet, egal ob parallel zu anderen Write-Operations oder zu Read-Operations.

    Nein, das wird damit nicht ausgesagt. Ich weiss nicht wie du das da hineindeuten willst, es steht aber auf jeden Fall nicht da. Was du schreibst würde zutreffen wenn da "you must synchronize read and write operations if there can be any write operations" stehen würde. Da steht aber nur "you must synchronize write operations" - also ich muss Schreibzugriffe synchronisieren. Nirgends steht aber dass ich Lesezugriffe auch mit Schreibzugriffen synchronisieren muss. Und sag jetzt bitte nicht "das ist logisch" - klar isses logisch wenn man weiss wie sowas normalerweise geht, aber es steht eben nicht dort.

    Davon abgesehen ist jede Formulierung die nicht für einen Grossteil aller potentiellen Leser eindeutig verständlich ist schlecht, im Sinn von ungünstig. Ganz egal ob sie nun technisch gesehen korrekt ist oder nicht (und ich bestreite immer noch dass sei das ist).



  • hustbaer schrieb:

    Marc++us schrieb:

    hustbaer schrieb:

    Die Formulierung ist nicht eindeutig, da die Möglichkeit dass evtl. jmd lesen UND schreiben möchte nicht berücksichtigt wird

    Doch. "any write operations" bedeutet >= 1. Damit wird ausgesagt, daß man synchronisieren muß, sobald mindestens 1 Write-Operation stattfindet, egal ob parallel zu anderen Write-Operations oder zu Read-Operations.

    Nein, das wird damit nicht ausgesagt. Ich weiss nicht wie du das da hineindeuten willst, es steht aber auf jeden Fall nicht da. Was du schreibst würde zutreffen wenn da "you must synchronize read and write operations if there can be any write operations" stehen würde. Da steht aber nur "you must synchronize write operations" - also ich muss Schreibzugriffe synchronisieren. Nirgends steht aber dass ich Lesezugriffe auch mit Schreibzugriffen synchronisieren muss.

    Ich verstehe es genauso wie Marc++us und finde auch, dass die Aussage recht eindeutig ist.
    "any write operations" ist eine generalisierte Aussage und schließt alles ein, wo mindestens ein write dabei ist.



  • Die Frage ist nicht wie man "any write operations" versteht, sondern es ist eine Frage der Grammatik.

    "you must synchronize any write operations" -> "synchronize write operations" - das "synchronize" bezieht sich NUR auf "write operations". Dieser Satz besagt NICHT dass ich auch "read operations" "synchronize"-en muss.

    Alleine das die Frage hier gestellt wurde beweist ja wohl dass die Formulierung NICHT eindeutig bzw. klar verständlich ist.

    Weiters ist das Wort "synchronize" sowieso etwas schwammig - "synchronize" kann vieles heissen. Es könnte z.B. genauso gemeint sein dass alle Zugriffe gleichzeitig erfolgen müssen.



  • Das Wort "any" kannste nicht einfach weglassen. Diese Wort verstärkt doch gerade, dass *jede* Schreiboperation synchronisiert werden muß.


Anmelden zum Antworten