Anzeige:
Ergebnis 1 bis 6 von 6

Thema: [c] fragen zu mutexe

  1. #1
    Registrierter Benutzer
    Registriert seit
    28.08.2002
    Beiträge
    496

    [c] fragen zu mutexe

    ich schreibe gerade ein programm das mehrere threads verwendet. nun habe ich ein paar variablen die evtl geschützt werden sollen durch solche mutexen...
    der speicher wird zuvor per malloc geholt blabla.. (habe einen fifo)

    so nun meine fragen:
    wenn 2 threads nur lesend auf eine variable zugreifen, muss ich diese dann auch schützen?
    ist es möglich explizit 1 variable zu schützen und nicht alle threads bei einem neuen lockrequest zu "blockieren"?

    danke schonomal für hilfe
    greetz

  2. #2
    Registrierter Benutzer Avatar von Trillian
    Registriert seit
    26.04.2001
    Beiträge
    180
    1.) Glaube schon, bin mir aber nicht sicher.
    2.) Ist pthread_mutex_trylock() die Lösung für dein Problem? Hab's nicht ganz verstanden.

  3. #3
    Registrierter Benutzer
    Registriert seit
    28.08.2002
    Beiträge
    496
    mhh nochmal zu 2.
    soweit ich diesen lock verstanden habe wird damit alles gelockt was versucht erneut zu locken egal wie die zugehörige variable heißt...

    ist es möglich einen mutexe auch zu benennen? somit wäre mir glaub ich auch geholfen...

    danke für die antwort!
    greetz

  4. #4
    Registrierter Benutzer Avatar von r00t043
    Registriert seit
    11.01.2004
    Beiträge
    38
    Original geschrieben von quinte17
    mhh nochmal zu 2.
    soweit ich diesen lock verstanden habe wird damit alles gelockt was versucht erneut zu locken egal wie die zugehörige variable heißt...
    Ich hab das anders verstanden, und zwar das
    Code:
    int pthread_mutex_trylock(pthread_mutex_t *mutex);
    versucht den Mutex zu locken und falls er es schon ist, sofort zurückkehrt und den Thread nicht blockiert. Ob es erfolgreich war sieht man an dem Wert, der zurückgegeben wurde.
    Original geschrieben von quinte17

    ist es möglich einen mutexe auch zu benennen?
    [...]
    Ja es ist möglich, was soll man schliesslich mit einem der nicht benannt ist....
    z.B.
    Code:
    pthread_mutex_t buffer_mutex;

  5. #5
    Registrierter Benutzer Avatar von panzi
    Registriert seit
    04.05.2001
    Ort
    Kottingbrunn
    Beiträge
    609
    @1
    Wenn du nen Thread hast, der nur lesend auf eine spezielle Variable zugreift, dann muss der nicht locken. Damit aber der generierte code richtig funktioniert solltest du die Variable als volatile deklarieren, z.B.: volatile int i;
    Hab das rausgefunden als ich ne schleife in einen thred hatte, welcher in der Abbruchbedingung ne globale Variable hatte, die von nen anderen Thread geändert wurde. Die Schleife lief endlos, da die Änderung nicht vom Thread bemerkt wurde (hatte wohl ne kopie der Variable in seinen stack????).

    @2
    Leg einfach für jede Variable je eine Mutex an. z.B. Variable: volatile int i; Mutex: pthread_mutex_t i_mutex; Dann einfach nur diese mutex locken, wenn du auf die Variable zugreifen willst.



    @pthreads
    Da hab ich dieses gute basic howto gefunden:
    http://www.llnl.gov/computing/tutori...eads/MAIN.html

    Das ist ne nette Referenz:
    http://java.icmc.sc.usp.br/library/b...s/document.htm

    Und die manpage helfen auch sehr:
    http://unixhelp.ed.ac.uk/CGI/man-cgi?pthread_mutex_lock

    Goggle einfach nach pthreads bzw. "posix threads".
    Intel Core 2 Duo CPU 2.66GHz; Nvidia GeForce 8 8800 GTS; 4GB RAM; Fedora 12; KDE-testing

  6. #6
    Registrierter Benutzer
    Registriert seit
    28.08.2002
    Beiträge
    496
    hey super!
    danke für die einfache erklärung!
    ich werd mir des dann gleich mal anschaun

    greetz

Lesezeichen

Berechtigungen

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