Code:
#include <stdio.h>
#include <pthread.h>
/*
Thread start function, counts to 10 and exits.
*/
void* f(void* arg)
{
char* param = (char*)arg;
int i;
for (i = 1; i <= 10; i++)
{
printf("\n%s %d", param, i);
sleep(1);/* (1) */
}
return NULL;
}
int main(void)
{
pthread_attr_t attr1;
pthread_attr_t attr2;
pthread_t th1;
pthread_t th2;
char arg1[10] = "thread1";
char arg2[10] = "thread2";
pthread_attr_init(&attr1);
pthread_attr_init(&attr2);
pthread_attr_setdetachstate(&attr1, PTHREAD_CREATE_DETACHED);
pthread_attr_setdetachstate(&attr2, PTHREAD_CREATE_DETACHED);
pthread_create(&th1, &attr1, &f, arg1);
pthread_create(&th2, &attr2, &f, arg2);
printf("\n");
return 0;
}
#include <stdio.h>
#include <pthread.h>
/*
Thread start function, counts to 10 and exits.
*/
void* f(void* arg)
{
char* param = (char*)arg;
int i;
for (i = 1; i <= 10; i++)
{
printf("\n%s %d", param, i);
sleep(1);/* (1) */
}
return NULL;
}
int main(void)
{
pthread_attr_t attr1;
pthread_attr_t attr2;
pthread_t th1;
pthread_t th2;
char arg1[10] = "thread1";
char arg2[10] = "thread2";
pthread_attr_init(&attr1);
pthread_attr_init(&attr2);
pthread_attr_setdetachstate(&attr1, PTHREAD_CREATE_DETACHED);
pthread_attr_setdetachstate(&attr2, PTHREAD_CREATE_DETACHED);
pthread_create(&th1, &attr1, &f, arg1);
pthread_create(&th2, &attr2, &f, arg2);
printf("\n");
return 0;
}
Sve lepo radi ako koristim joinable threads i pthread_join(), tada nema problema sa pozivom sleep(). Zasto detached thread pravi problem?
Sveti Avgustin: "Dobar hrišćanin treba da se kloni matematičara i svih onih koji daju lažna proročanstva. Postoji opasnost da su matematičari već sklopili pakt sa Đavolom, da pomrače čovekov um i da ga okuju okovima pakla."