/******************************************************************************/
/**
@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
}
/******************************************************************************/