2. POSIX szálak
Szálak
A segítségükkel ki lehet használni a számítógépben rendelkezésre álló több processzormagot.
Az I/O-ra várakozás is hasznosan tölthető.
Gazdaságosabb, mint új processzt indítani.
A szálak egy közös névtéren osztoznak.
A szálak nem tartanak nyilvántartást arról, hogy milyen szálakat indítottak, azt nekünk kell megoldani.
A szálak egy processzen belül a következőket osztják meg egymással.
Memória címtér
Megnyitott fájlok (fájlleírók)
Szignálok kezelése
Az aktuális munkajegyzéket (cwd, pwd)
Felhasználó név és csoport (jogosultságok)
Minden szálban viszont egyediek az alábbiak:
Szál azonosító (Thread ID)
Regiszterek, verem mutató
Lokális változók, visszatérési címek
Prioritások
Visszatérési hibakódok
Szál létrehozása és indítása
int pthread_create(
pthread_t* thread,
const pthread_attr_t* attr,
void *(*start_routine)(void *),
void *arg);
Paraméterek:
thread
: A szál azonosítója (unsigned long int
típus)attr
: Szál beállításához szükséges attribútumok. (AlapértelmezéshezNULL
érték.)start_routine
: A függvény, amelyet a szálban el kell indítani.arg
: Paraméterek, amelyek átadásra kerülnek a szálban indított függvénynek.
Visszatérési érték:
Amennyiben a szál sikeresen elindult, úgy 0 értékkel tér vissza, egyébként pedig hibakóddal.
Várakozás a szál végrehajtására
int pthread_join(
pthread_t thread,
void **retval);
Paraméterek:
thread
: A szál azonosítója, amelyikre várni kell majd a főszálnak.retval
: A szál által visszaadott érték (pthread_exit
hívásban). Amennyiben nincs rá szükség, úgyNULL
-al jelölhető.
Visszatérési érték:
Sikeres végrehajtás esetén 0, egyébként hibakód.
Mutexek
Mutex: Mutual Exclusion
Inicializálás:
pthread_mutex_t value_mutex = PTHREAD_MUTEX_INITIALIZER;
Kritikus szakasz kijelölése:
pthread_mutex_lock(&value_mutex);
// Critical section
pthread_mutex_unlock(&value_mutex);
Szál végrehajtásának félbeszakítása
int pthread_cancel(pthread_t thread);
Visszatérési érték:
Sikeres végrehajtás esetén 0, egyébként hibakód.
forrás: