-         
+ Antworten
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Funktion ohne Unterbrechung

  1. #1
    debbi1
    Gast

    Funktion ohne Unterbrechung

    Hallo C2-Freaks,

    wie schaffe ich es, dass eine Funktion oder ein Block von Anweisungen in einem Thread NIE durch andere Threads/Tasks unterbrochen werden kann?

    Danke für die Hilfe!

    Gruß

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    10.03.2004
    Ort
    München
    Alter
    33
    Beiträge
    286
    hmm...

    meine lösungsidee wäre, alle anderen threads anzuhalten, die funktion
    zu berechnen und alle anderen threads fortzusetzen.

    das müsste eigentlich so funktionieren. - mit prioritäten kommst du
    vermutlich in dem fall nicht weiter...

    warum ist es denn so wichtig, dass die anderen threads gar nicht mehr
    dran kommen?

    gruss,
    simon

  3. #3
    debbi1
    Gast

    Funktion ohne Unterbrechung

    hallo nestler,

    warum ist es denn so wichtig, dass die anderen threads gar nicht mehr dran kommen?
    ... weil in der speziellen Funktion einzelne Bits seriell ausgegeben werden, was nicht unterbrochen werden darf.

    Gruß debbi1

  4. #4
    debbi1
    Gast

    Ideen?

    ...??? [-(

    Hat denn keiner 'ne Idee???

    Hier ein ständchen für Ideen:

    Gruß debbi1

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    24.11.2003
    Ort
    Leipzig
    Alter
    29
    Beiträge
    578
    Du musst erstmal sagen, wieso der Bereich nicht unterbrochen werden darf.
    Poste am Besten mal deinen Quelltext. Dann kann ich dir konkret helfen.
    Vielleicht ist es garnicht notwendig eine Unterbrechung zu verhindern.

    MfG ACU
    http://www.roboterbastler.de
    endlich wieder online

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    10.03.2004
    Ort
    München
    Alter
    33
    Beiträge
    286
    auch wenn einzelne bits seriell ausgegeben werden sollen,
    kann die cc2 in der zwischenzeit noch was anderes machen
    - oder irre ich mich?

    sonst würde ja multithreading keinen sinn machen - wenn
    immer nur eine sache auf einmal getan werden kann

    oder ist das senden so zeitkritisch?

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    24.11.2003
    Ort
    Leipzig
    Alter
    29
    Beiträge
    578
    ja du hast Recht!
    Die CC2 hat eigentlich noch relativ große Reserven.
    Ich hatte noch nie Probleme beim senden, während andere Programme gleichzeitig liefen.
    Da war eher die Schnittstelle der Flaschenhals.
    http://www.roboterbastler.de
    endlich wieder online

  8. #8
    debbi1
    Gast

    Ok, ok ...

    Ok, ok ACU und nestler,
    ich habe verstanden: Die CC2 ist schnell genug.

    Aber mich interessiert das Ding doch noch:
    Wenn ich die CC2-Anleitung lese, gibt es ja da die Befehle capture und release. Sie sollen verwendbar sein, wenn z.B. 2 threads eine Resource (serielle Schnittstelle ...) benutzen wollen und es dann ja ein Zugriffsmischmasch geben könnte.

    Ist es damit nich auch möglich, einen thread-Teil oder eine Funktion "ununterbrechbar" zu machen???

    Gruß debbi1

  9. #9
    Gast
    Wenn du eine derartiges Problem ein für alle mal lösen willst, mußt du dir sowas wie ein "ressource Lock" implementieren. Es gibt mindestens 364 varianten, stichwort "MUTEX", das heißt, es gibt einen (globalen) Flag, den kann immer nur einer setzen (deine geschützte Routine z.b) und die anderen Threads fragen das ab, bevor sie im geschützen Bereich rumfummeln und lassen es dann von sich aus bleiben, bis der Flag wieder frei ist. ( so in etwa halt). mfg robert

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    10.03.2004
    Ort
    München
    Alter
    33
    Beiträge
    286
    stimmt, das ist eine gute lösung - kenne das unter dem stichwort
    semaphor... das einzige, worauf man aufpassen muss, ist, dass kein
    "deadlock" auftreten kann.
    (d.h. thread a und b brauchen z.b. beide resource 1 und 2, thread a
    reserviert z.b. resource 2 und thread b resource 1, nun kann keiner
    mehr arbeiten, da jeder thread wartet bis die andere ressource frei-
    gegeben wird.)

    bei komplexeren programmen kann das schon etwas knifflig werden...

    wobei der thread natürlich in dieser lösung durchaus unterbrochen wird -
    durch alle anderen threads. diese müssen nur unter umständen warten,
    da die benötigte resource (bzw. das flag) nicht frei ist...

+ Antworten
Seite 1 von 2 12 LetzteLetzte

Benutzer, die dieses Thema gelesen haben: 0

Derzeit gibt es keine Benutzer zum Anzeigen.

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •