Приветствую!
Столкнулся с проблемой, которая проявляется на линуксе и, даже, в 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