LINUX.ORG.RU

потоки... глюки!!!


0

0

Hi alL! Помогите pls проблема с потоками..ю глюки... пока не понятно у меня или у системы!!! Текст программки:

#include <stdio.h> #include <pthread.h>

int j = 2; int i = 1; int k = 3; pthread_t client_th; pthread_t parent_th;

void* subclient(void* p) { printf("subclient %d\n",*(int*)p); pthread_exit(NULL); }

void* firstclient(void* p) { printf("client %d\n",*(int*)p); pthread_create(&client_th,NULL,&subclient,&k); pthread_exit(NULL); return NULL; }

int main(int argc,char** argv) { printf("parent\n"); pthread_create(&parent_th,NULL,&firstclient,&i); }

Копилирую gcc main.c -o main -lpthread Запускаю, смотрю вывод программы: первый раз: parent client 1 subclient 3 второй раз: parent client 1 client 1 третий раз: parent client 1 client 1 subclient 1 четвертый: parent client 1 subclient 3 subclient 3

ЧТО ТАКОЕ!!!!! ПОЧЕМУ!!!! Я ГЛЮЧУ или СИСТЕМА? (Slackware 8,glibc 2.2.3, gcc 2.95.3) Буду признателен за любой совет :) ~ ~ ~ ~ ~ ~

anonymous

Re: потоки... глюки!!!

А как насчёт того, чтобы родительский поток дожидался перед выходом окончания дочернего потока:

#include <stdio.h>
#include <pthread.h> 
int j = 2; 
int i = 1; 
int k = 3; 
pthread_t client_th; 
pthread_t parent_th; 

void* subclient(void* p) 
{ 
  printf("subclient %d\n",*(int*)p);
  pthread_exit(NULL);
  return NULL;
} 

void* firstclient(void* p) 
{ 
  printf("client%d\n",*(int*)p);
  pthread_create(&client_th,NULL,&subclient,&k); 
  pthread_join(&client_th);
  pthread_exit(NULL);
  return NULL;
} 

int main(int argc,char** argv) 
{
  printf("parent\n");
  pthread_create(&parent_th,NULL,&firstclient,&i);
  pthread_join(&parent_th);
}

В этом случае вывод должен быть строго:
parent
client 1
subclient 3

Попробуй. Может поможет. Хотя 100% гарантии не даю.

David ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.