Announcement

Collapse
No announcement yet.

Thread-Problem

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Thread-Problem

    Ich hätte da ein kleines Problem, wo ich einfach keine vernünftige Lösung finde.
    Das Problem ist folgendes:
    <BR>
    ich habe drei Threads die unterschiedlich auf ein Hardware-Device zugreifen.

    <B>Thread1</B> ist nicht so wichtig, er muß nur einigermaßen regelmäßig zugreifen dürfen. (ca. 1-2 mal pro sekunde)

    <B>Thread2</B> muß nur unregelmäßig zugreifen um bestimmte Einstellungen zu übermitteln, sollte aber dann sofort zugreifen dürfen.

    <B>Thread3</B> ist nicht immer aktiv, muß dann aber wirklich regelmäßig spätestens alle 2millisekunden zugreifen dürfen.

    <BR>
    Wie kann ich diese drei Threads am besten so syncronisieren?
    Ich wäre für entsprechende Anregungen oder entsprechenden Code sehr dankbar.

  • #2
    Hallo,

    wenn auf einem Rechner immer nur ein einziger Thread auf ein bestimmtes Gerät zugreifen darf, ist ein <b>Mutex</b> die richtige Wahl (da in diesem Fall auch kein Problem auftritt, wenn die Anwendung auf diesem Rechner mehrfach gestartet wird).

    Die Antwort auf die anderen Fragen hängt davon ab, wie lange die einzelnen Zugriffe der 3 Threads dauern. Wenn der Thread 1 zum Beispiel 100 Millisekunden für seinen Job benötigt, kollidiert dies mit dem Thread 2 und 3

    Comment


    • #3
      Das Problem ist, dass Thread 2 z.B. sofort als nächster Thread zur Ausführung kommen muß und das ist über ein Mutex, soweit ich weiß einfach nicht möglich

      Comment


      • #4
        Hallo,

        in diesem Fall wäre das folgende denkbar: Es gibt einen Steuer-Thread und 3 Fiber (Win32-API-Funktion <b>CreateFiber</b>). Der Steuer-Thread überwacht die Anforderungen und lässt dann immer nur den Fiber laufen (Win32-API-Funktion <b>SwitchToFiber</b>), der für diesen Job zuständig ist. Bei einem Fiber (die niemals parallel laufen können) braucht man dann auch keinen zusätzlichen Synchronisierungs-Mechnismus, da immer nur ein einziger Fiber zur gleichen Zeit auf das Gerät zugreifen kann

        Comment


        • #5
          Danke für den Tip, ich werde mich damit mal beschäftigen

          Comment


          • #6
            Ich meine Du wirst keinen Lösungsansatz finden, solange Du Thread2 den ultimativen Vorrang geben möchtest. Egal ob Mutex, CriticalSections oder Fibers.
            Ich verwende jedoch meist CriticalSections, damit ein Objekt (hardware-Device, TList-Objekt, etc.) zur gleichen Zeit nur von einem Thread "bearbeitet" werden kann. Ich kann dabei jedoch nicht ausschließen, das Thread2 warten muss bis der aktiv Sperrende Thread die CriticalSection freigibt

            Comment

            Working...
            X