The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"pthread_create() всегда возвращает одинаковый ID"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"pthread_create() всегда возвращает одинаковый ID"  
Сообщение от roman (??) on 28-Фев-06, 14:53 
Приветствую.

Изучаю треды, вот простенькая программа, проблема в том, что ВСЕГДА тред создается с одним и тем же ID:

#include <stdio.h>

#include <unistd.h>
#include <pthread.h>

/* read dice on standard input, write results on standard output */
void *roll_dice(void *tid)
{
printf("thread %lu run ", *((pthread_t *)tid));
pthread_exit(NULL);
}

int main(void)
{
  pthread_t tid;

  while (1) {
if (pthread_create(&tid, NULL, roll_dice, (void *)&tid) != 0) {
perror("pthread_create()");
return -1;
}

if (pthread_join(tid, NULL) != 0) {
perror("pthread_join()");
return -1;
}
printf("and terminated, sleep 3 sec.\n");
sleep(3);
  }

  return 0;
}

Вывод программы такой:

thread 1082354880 run and terminated, sleep 3 sec.
thread 1082354880 run and terminated, sleep 3 sec.
thread 1082354880 run and terminated, sleep 3 sec.
...

ОС - линукс 2.4.x. В чем может быть проблема?
Спасибо!

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "pthread_create() всегда возвращает одинаковый ID"  
Сообщение от Sergey email(??) on 28-Фев-06, 16:04 
> printf("thread %lu run ", *((pthread_t *)tid));

Попробуй выводить результат pthread_self. Она должна сказать текущий thread id.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "pthread_create() всегда возвращает одинаковый ID"  
Сообщение от йцукенг on 28-Фев-06, 16:08 
попробуй распечатать этот tid из main после создания потока.
имхо у тебя переключение потока происходит после того, как создался thread, но до того, как в main происходит присваивание переменной tid значения, возвращенного pthread_create.
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

3. "pthread_create() всегда возвращает одинаковый ID"  
Сообщение от chip email(ok) on 28-Фев-06, 18:50 
>Приветствую.
>
>Изучаю треды, вот простенькая программа, проблема в том, что ВСЕГДА тред создается
>с одним и тем же ID:
>
>#include <stdio.h>
>
>#include <unistd.h>
>#include <pthread.h>
>
>/* read dice on standard input, write results on standard output */
>
>void *roll_dice(void *tid)
>{
> printf("thread %lu run ", *((pthread_t *)tid));
> pthread_exit(NULL);
>}
>
>int main(void)
>{
>  pthread_t tid;
>
>  while (1) {
> if (pthread_create(&tid, NULL, roll_dice, (void *)&tid) != 0) {
>  perror("pthread_create()");
>  return -1;
> }
>
> if (pthread_join(tid, NULL) != 0) {
>  perror("pthread_join()");
>  return -1;
> }
> printf("and terminated, sleep 3 sec.\n");
> sleep(3);
>  }
>
>  return 0;
>}
>
>Вывод программы такой:
>
>thread 1082354880 run and terminated, sleep 3 sec.
>thread 1082354880 run and terminated, sleep 3 sec.
>thread 1082354880 run and terminated, sleep 3 sec.
>...
>

> gcc -lpthread test.c
> ./a.out
thread 134558720 run and terminated, sleep 3 sec.
thread 134559232 run and terminated, sleep 3 sec.
thread 134559744 run and terminated, sleep 3 sec.
thread 134560256 run and terminated, sleep 3 sec.
thread 134560768 run and terminated, sleep 3 sec.
^C
> uname -rs
FreeBSD 6.0-STABLE
>

>ОС - линукс 2.4.x.

Может быть в этом? Стоит порыть рассылки на этот счёт.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру