Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Synchronisierung Kategorie: Programmierung (von Christian Jost - 28.10.2005 20:01)
Als Antwort auf Re: Synchronisierung von KlaRa - 26.10.2005 13:37
Ich nutze:
C-Control II Station, OSOPT V3.0
Hallo Klaus,

Danke für deine Antwort. Ich denke auch dass es sich so verhält.

Es wird einfach ziemlich peinlich wenn die Anwendung während dem Betrieb abstürzen sollte :-((

Per Zufall habe ich herausgefunden, dass run 255 sich direkt auswirkt, also nicht erst
nach einem Thread-Wechsel.

Gruss Christian


> Hallo,
> ich Denke, so lang Du nur einen Wert auf False setzt, wird nichts negatives passieren. Im extremsten
> Fall wird der Variablenwert zweimal hintereinander gesetzt. Ich denke nicht das die Variablenverwaltung
> der CC2 so verfeinert ist, dass sie eine Variable zum Ă?ndern sperrt. Es wird wohl nur der Zeiger auf den
> Speicherplatz geholt und dort hineingeschrieben.
> Anders ist es wenn man Werte zuverlässig inkremieren möchte. Dann muss man sicher mit capture
> arbeiten.
>
> Gruss Klaus.
>
> > Hallo,
> >
> > Ich hätte ein paar Fragen zur Synchronisierung:
> >
> > 1)
> > Ich habe 4 Worker-Threads. Sobald einer fertig ist, soll dieser ein globales Flag setzen:
> >
> > int ready;
> > ...
> > ready = TRUE;
> >

> > Ein anderer Thread fĂĽhrt folgendes aus:
> >
> > loop
> > {
> >   wait ready;
> >   ready = FALSE;
> >   ...
> > }
> >

> > Kann die virtuelle Maschine durcheinander geraten (=Absturz), wenn zwei Threads "gleichzeitig"
> > versuchen auf dieselbe Variable zuzugreifen? Es spielt keine rolle ob das Flag mehrmals gesetzt
> > wird oder von wem es gesetzt wird. Es ist einfach wichtig dass es gesetzt wird.
> > Ich möchte für diesen Fall kein capture/release benutzen um die Programmausführung nicht durch
> > Wartezustände zu verlangsamen.
> >
> >
> > 2)
> > wenn ich durch run 255 die Priorität erhöhe, so wirkt sich das sofort aus oder erst
> > nach dem nächsten Thread-Wechsel?
> > Ich denke da an folgende Anwendung fĂĽr einen Ringbuffer:
> >
> > run 255;
> > capture sema;
> > bufCount = (bufCount + 1);
> > release;
> > resume;
> >

> > Ziel ist auch hier wieder möglichst wenig zu blockieren.
> >
> >
> > 3)
> > In diesem Eintrag: 11080
> > hat André H. geschrieben, dass andere Threads immer lesend auf Variablen zugreifen dürfen
> > (ohne capture) wenn sie nur von einem Thread verändert werden.
> > Gilt das auch fĂĽr long, float und string oder nur fĂĽr byte/int?
> >
> >
> > Besten Dank fĂĽr eure Hilfe.
> >
> > Gruss,
> > Chris
> >
> >


    Antwort schreiben


Antworten: