Pthreads

POSIXový standard pro vlákno

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.

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:

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_".

Příklad

editovat

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.

POSIX vlákna pro Windows

editovat

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]

Reference

editovat
  1. Pthread Win-32: Level of standards conformance [online]. 2006-12-22 [cit. 2010-08-29]. Dostupné online. 
  2. HART, Johnson M. Experiments with the Open Source Pthreads Library and Some Comments [online]. 2004-11-21 [cit. 2010-08-29]. Dostupné v archivu pořízeném dne 2010-08-30. 
  3. pthread-win32_x64.zip Source and binary for Pthreads-w32 v2.8.0 [online]. 2010-01-26 [cit. 2010-08-29]. Dostupné online. 
  4. Forum discussion: pthreads-on-64bit-Windows [online]. 2010-01-26 [cit. 2010-08-29]. Dostupné v archivu pořízeném dne 2010-12-15. 
  5. Chapter 1: Introduction to Windows Services for UNIX 3.5 [online]. Dostupné online. 

Literatura

editovat
  • David R. Butenhof. Programming with POSIX Threads. [s.l.]: Addison-Wesley ISBN 0-201-63392-2. 
  • Bradford Nichols, Dick Buttlar, Jacqueline Proulx Farell. Pthreads Programming. [s.l.]: O'Reilly & Associates Dostupné online. ISBN 1-56592-115-1. 
  • Charles J. Northrup. Programming with UNIX Threads. [s.l.]: John Wiley & Sons ISBN 0-471-13751-0. 
  • Kay A. Robbins and Steven Robbins. UNIX Systems Programming. [s.l.]: Prentice-Hall Dostupné online. ISBN 0-13-042411-0. 

Související články

editovat

Externí odkazy

editovat
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy