Pthreads

POSIXový standard pro vlákno From Wikipedia, the free encyclopedia

Remove ads

Pthreads je v informační technologii POSIXový standard pro vlákno (thread). Standard, POSIX.1c, Threads rozšíření (IEEE Std 1003.1c-1995), definuje API pro vytváření a manipulaci s vlákny.

Implementace API je možná na mnohých Unix-like operačních systémech podporujících POSIX jako např. FreeBSD, NetBSD, OpenBSD, GNU/Linux (projekt NPTL), Mac OS X, Solaris, DR-DOS a implementace pro Microsoft Windows také existuje za použití podsystému SFU/SUA, který poskytuje nativní implementaci několika POSIX API, popř. také při využití balíčků třetí strany pthreads-w32,[1] který implementuje pthreads na vrcholu stávajících Windows API.

Remove ads

Obsah

Pthreads definuje několik datových typů, funkcí a konstant pro programovací jazyk C. K použití vláken v programu je nutné připojit hlavičkový soubor pthread.h Archivováno 16. 8. 2008 na Wayback Machine.. Implementace vláken se nachází v knihovně libpthread.

Existuje něco kolem 100 Pthread procedur, všechny s prefixem "pthread_" a mohou být rozděleny do čtyř skupin:

  • Manipulace s vlákny – vytváření, spojování, atd.
  • Mutexy
  • Podmínkové proměnné
  • Synchronizace mezi vlákny za použití čtecích/zapisovacích zámků a bariér

POSIXové semaforové API pracuje s POSIX vlákny, ale není částí standardů pro práci s vlákny, které byly definovány ve standardu POSIX.1b, real-time rozšíření (IEEE Std 1003.1b-1993). Proto mají semaforové procedury prefix "sem_" a ne "pthread_".

Remove ads

Příklad

Příklad ukazující použití Pthreads v jazyce C:

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
 
#define NUM_THREADS 5
 
void *TaskCode(void *argument)
{
   int tid;
 
   tid = *((int *) argument);
   printf("Ahoj světe! To jsem já, vlákno %d!\n", tid);
 
   /* Zde je možnost vložit užitečné věci :-) */
 
   return NULL;
}
 
int main(void)
{
   pthread_t threads[NUM_THREADS];
   int thread_args[NUM_THREADS];
   int rc, i;
 
   /* vytvoření všech vláken */
   for (i=0; i<NUM_THREADS; ++i) {
      thread_args[i] = i;
      printf("Ve fci main: vytváření vlákna %d\n", i);
      rc = pthread_create(&threads[i], NULL, TaskCode, (void *) &thread_args[i]);
      assert(0 == rc);
   }
 
   /* čekání na dokončení všech vláken */
   for (i=0; i<NUM_THREADS; ++i) {
      rc = pthread_join(threads[i], NULL);
      assert(0 == rc);
   }
 
   exit(EXIT_SUCCESS);
}

Tento program vytváří 5 vláken, každé spouští funkci TaskCode, která vypisuje unikátní číslo daného vlákna do standardního výstupu. Pokud programátor chce, aby vlákna mezi sebou komunikovala, vyžadovalo by to definování globální proměnné a ošetření souběhu.

Remove ads

POSIX vlákna pro Windows

Windows nativně nepodporuje standard pthreads, proto se projekt Pthreads-w32 snaží poskytnout přenosnou open-source implementaci. S malou nebo žádnou modifikací mohou být také použity Unix programy (které využívají pthreads) do platformy Windows.[2] Poslední verze 2.8.0 je kompatibilní s 64bitovými systémy Windows.[3][4]

Interix – prostředí dostupné ve Windows Services pro UNIX/Subsystem pro aplikace založené na UNIXu. Balíček poskytuje nativní port pthreads API, tj. nenamapováno na Win32/Win64 API ale vytvořen přímo v operačním systému "syscall" rozhraní.[5]

Odkazy

Loading content...
Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads