/* * Przykładowy program dla kursu "POSIX Threads" z wikibooks.pl * * Temat: funkcje wykonywane jednokrotnie * * Autor: Wojciech Muła * Ostatnia zmiana: 2010-03-xx */
#include<stdlib.h>#include<stdio.h>#include<pthread.h>#include<errno.h>#define test_errno(msg) do{if (errno) {perror(msg); exit(EXIT_FAILURE);}} while(0)/* obiekt gwarantujący jednokrotne wykonanie, musi zostać zainicjowany */pthread_once_tprogram_gotowy=PTHREAD_ONCE_INIT;voidinicjalizacja(){/* inicjalizacja, np. prekalkulowanie jakiś tablic, otwieranie pliku logowania itp. */puts("Rozpoczynanie programu");}//------------------------------------------------------------------------void*watek(void*numer){pthread_once(&program_gotowy,inicjalizacja);printf("Uruchomiono wątek nr %d\n",(int)numer);returnNULL;}//------------------------------------------------------------------------#define N 10 /* liczba wątków */intmain(){pthread_tid[N];inti;/* utworzenie wątków */for(i=0;i<N;i++){errno=pthread_create(&id[i],NULL,watek,(void*)i);test_errno("pthread_create");}/* oczekiwanie na jego zakończenie */for(i=0;i<N;i++){errno=pthread_join(id[i],NULL);test_errno("pthread_join");}returnEXIT_SUCCESS;}//------------------------------------------------------------------------