time & pthread
От: Grammazeka  
Дата: 26.05.05 07:02
Оценка:
Приветствую!

Столкнулся с проблемой, которая проявляется на линуксе и, даже, в cygwin-е.

Вот пример программки, в которой время выводится неправильно (в UTC
вместо local) во всех трех нитях.

Однако стоит раскомментировать одну из двух строчек в ф-ции main
(любою), или обе, как все начинает работать как надо.

Не могу найти логического объяснения происходящему.

Вот сам пример:

enum {
NUMTHREADS = 3
};

void * func(void * arg)
{
int id;
time_t t = 0;
char b[64], *d;

id = (int)(arg);

memset(b,'\0',64);

t = time(&t);
d = ctime_r(&t,b);
d[strlen(d)-1]='\0';
printf("thread id %d, time %s, buf %s\n", id, d, b);

return (void *) 0;
}

int
main()
{
pthread_t t;
pthread_attr_t attr;
void * result = NULL;
int i;
time_t tt;


tt=0;
tt=time(&tt);

/*
uncomment one or two next lines to see correct
time within threads
*/
/* tzset(); */
/* printf("time = %s\n", ctime(&tt)); */
/*
it's strange but this is enougth to uncomment only _one_ line,
tzset or ctime and everuthing begins work correctly
*/

pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);

for (i = 0; i < NUMTHREADS; i++)
{
assert(pthread_create(&t, &attr, func, (void*)i) == 0);
pthread_join(t, &result);
}

return 0;
}

Regards,
Kirill.
Posted via RSDN NNTP Server 1.9
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.