Semaphoren durch pthread_mutex ersetzen!?

Herakles

Profifragensteller
Moin!

Arbeitsumgebung: Linux :eek: (bin auf der Arbeit und habe da 0 Einfluss :ugly:)

Ich verwende ein Programm mit Multithreading und nutze dafür ein

Code:
#include <pthread.h>

Bisher habe ich auch noch einige Semaphoren verwandt, die ich jetzt gern durch ihr pthread-pendant ersetzen möchte.

Folgender Aufbau:

Ich habe zwei Semaphoren, die ich mit sem_init(3) initialisiere:

Code:
sem_init( &wlan_empty, 0, 255 );
sem_init( &wlan_full, 0, 0 );

Hiermit werden zwei Semaphoren erzeugt, die zwei verschiedene Namen tragen, "shared" sein sollen zwischen Threads (die erste 0 hinter dem ersten Komma) und dann soll "wlan_empty" auf 255 gesetzt werden und wlan_full auf 0.

Hiermit erreiche ich, dass ich 255 mögliche leere Speicherplätze schützen kann (mit wlan_empty) und ebensoviele als "gefüllt" schützen lassen kann (wlan_full).

Nun gibt es die Methode sem_post(3) und sem_wait(3), die Semaphoren inkrementieren (sem_post) bzw. dekrementieren (sem_wait). Somit kann ich 255 verschiedene Speicherplätze beschreiben und schützen lassen.

Diese Semaphoren würde ich nun gern durch ihr Pendant der Pthreads ersetzen.

Kennt jemand die Funktionen, die ich suche?

Vielen Dank im Voraus,
Herakles
 
Diese Semaphoren würde ich nun gern durch ihr Pendant der Pthreads ersetzen.

POSIX Threads erlauben Mutexe ("mutual exclusion"), also binäre Semaphore. Alternativ gibt es Read-/Write-Locks, bei denen die jeweils ein schreibender Thread oder mehrere lesende Threads das Lock halten können. Aber das weisst Du ja wahrscheinlich schon.

Die klassichen Semaphore aus der Betriebssystem-Theorie wie sie in SysV IPC implementiert sind gibt es nicht für POSIX Threads. Es spricht aber nichts dagegen, ein IPC Semaphor in mehreren Threads eines einzelnen Prozesses zu verwenden. Alternativ kannst Du Dir ein Semaphor relativ einfach aus Kombination von Mutex und Condition selbst bauen. Du solltest Dir aber genau überlegen, ob Du wirklich ein Semaphor brauchst oder ob sich Dein Synchronisationsproblem nicht einfacher lösen lässt.
 
Back
Top