Threads und Zugriff ohne sync



  • Ich habe eine Ringbuffer Klasse nach dem klassischen Consumer/Producer Prinzip geschreiben. Soweit OK.
    Da Consumer und Producer oder pRead und pWrite in zwei unterschiedlichen Thread agieren muß ich einige Variablen synchronisieren. Auch OK.

    Allerdings:
    Beispiel eine Funktion zum weiterschieben der Lesemarke.

    void moveReadMark(int n)
    {
      if(pWrite > pReadMark)
      {
       int s = (pWrite - pReadMark);
       if(n > s)
       {
         pReadMark+= s
       }
       ...
      }
    }
    

    Es stört nicht wenn pWrite bei if und bei der Berechnung unterschiedliche sind. Das ist nicht das Problem.

    Wäre aber ein Threadwechsel bei if(pWrite > pReadMark) überhaupt möglich.
    Also so, das nur ein Teil der Addresse auf die pW zeigt ausgelesen wird und nachher Müll raus kommt? Oder komme ich tatsächlich ohne sync aus?


Anmelden zum Antworten