/******************************************************************************/ /** @file "Pthreads/C/Primer 0 - hello/hello.c" @brief "Hello Pthread!" primer :) Jednostavan program koji demonstrira kreiranje i terminaciju niti korisćenjem POSIX threads (Pthreads) API-ja.@n @n Ovaj primer je za potrebe kursa preuzet sa http://www.llnl.gov/computing/tutorials/pthreads/. @author Blaise Barney */ /******************************************************************************/ #include #include #include /******************************************************************************/ /** @brief Broj niti koje treba kreirati */ #define NUM_THREADS 5 /******************************************************************************/ /** @brief Posao koji svaka nit treba da radi. @param thread_id Identifikacioni broj niti. Svaka nit pre ispisivanja poruke na standardni izlaz radi neki bespotreban posao, odnosno troši cikluse vrteći se u petlji. */ void* print_hello(void* thread_id) { unsigned i, j = rand() * rand() * rand(); printf("%d: %u nepotrebnih iteracija.\n", thread_id, j); for (i = 0; i < j; i++) i++; printf("%d: Hello World!\n", thread_id); pthread_exit(NULL); } /******************************************************************************/ /** @brief Glavna nit programa. @param argc Broj argumenata komandne linije. @param argv Niz argumenata komandne linije. U glavnom toku programa kreiramo i startujemo @ref NUM_THREADS niti. U slučaju da kreiranje niti ne uspe, na standardnom izlazu se ispisuju podaci o grešci. */ int main(int argc, char* argv[]) { pthread_t threads[NUM_THREADS]; int rc, t, i, j = rand() * rand() * 10; #ifdef WIN32 pthread_win32_process_attach_np(); #endif for (t = 0; t < NUM_THREADS; t++) { printf("Creating thread %d\n", t); rc = pthread_create(&threads[t], NULL, print_hello, (void*) t); for (i = 0; i < j; i++) i++; if (rc) { printf("ERROR; return code from pthread_create() is %d\n", rc); exit(-1); } } pthread_exit(NULL); #ifdef WIN32 pthread_win32_process_detach_np(); #endif } /******************************************************************************/