Muss der Vektor in diesem Fall durch ein Mutex geschützt werden?



  • @krümelkacker:
    "False sharing" nennt man das wenn es die Performance drückt, aber alles korrekt funktioniert.
    Wenn es zu unerwünschtem/unerwartetem Verhalten führt, dann nennt man es Scheissendreck. (Ne, sorry, keine Ahnung wie man dann sagt :D)



  • Herb Sutter redet ganz gerne von "false sharing" in diesem Kontext. Ich denke, das ist es, was manni66 im Gedächtnis hatte.



  • krümelkacker schrieb:

    Herb Sutter redet ganz gerne von "false sharing" in diesem Kontext. Ich denke, das ist es, was manni66 im Gedächtnis hatte.

    Nein



  • Sorry, es sieht für mich immer noch so aus, als ob Du das mit dem Chache falsch verstanden hast. Da hat das "Nein" nichts dran geändert, fürchte ich.



  • krümelkacker schrieb:

    Sorry, es sieht für mich immer noch so aus, als ob Du das mit dem Chache falsch verstanden hast. Da hat das "Nein" nichts dran geändert, fürchte ich.

    Naja, mindestens einer von uns liegt falsch 😉



  • BTW: Das Speichermodell von C++0x erlaubt diesbezüglich soweit ich weiss kein unerwartetes Verhalten.



  • hustbaer schrieb:

    BTW: Das Speichermodell von C++0x erlaubt diesbezüglich soweit ich weiss kein unerwartetes Verhalten.

    IMHO muss man dann aber std::atomic<> (oder so ähnlich) verwenden. Ob man dann bei einem Array aber die Elemente auch als atomic definieren muss?



  • manni66 schrieb:

    hustbaer schrieb:

    BTW: Das Speichermodell von C++0x erlaubt diesbezüglich soweit ich weiss kein unerwartetes Verhalten.

    IMHO muss man dann aber std::atomic<> (oder so ähnlich) verwenden. Ob man dann bei einem Array aber die Elemente auch als atomic definieren muss?

    Nein.
    Lass es sein, bitte, und hoer auf krümelkacker.

    atomic ist wieder was ganz anderes.


  • Mod

    1.7/3



  • vector<bool> kann zu Data Races führen, aber der ist bekanntlich ein Sonderfall.

    23.2.2 Container data races
    ...
    2 Notwithstanding (17.6.5.9), implementations are required to avoid data races when the contents of the contained
    object in different elements in the same sequence, excepting vector<bool>, are modified concurrently.

    3 [ Note: For a vector<int> x with a size greater than one, x[1] = 5 and *x.begin() = 10 can be executed
    concurrently without a data race, but x[0] = 5 and *x.begin() = 10 executed concurrently may result in
    a data race. As an exception to the general rule, for a vector<bool> y, y[0] = true may race with y[1]= true. —end note ]


Anmelden zum Antworten