Я пытаюсь написать многопоточную программу и встретить некоторые проблемы.Моя петля не работает должным образом в многопоточном режиме
После я бегу main.c
, и я получаю
я: 0
новый поток 0
новый поток 1
я: 1
я: 1
//main.c
#include <pthread.h>
#include <stdio.h>
#include <stdint.h>
void* routine(void* arg)
{
int id = (intptr_t) arg;
printf("new thread %d\n", id);
pthread_exit((void*)(intptr_t) id);
}
int main()
{
pthread_t t[2];
int i;
for(i=0; i<2; i++)
{
int ret = pthread_create (&t[i], NULL, &routine, (void *)(intptr_t) i);
if(ret != 0) {
printf("Error: pthread_create() failed\n");
return -1;
}
}
int id;
/////////here
for(i=0; i<2; i++)
{
printf("i: %d\n",i);
pthread_join(t[i], (void **)&id);
}
/////////here
pthread_exit(NULL);
}
Мои проблемы:
- Почему последний цикл работает трижды?
- Если я изменяю
pthread_t t[2]
наpthread_t t
и создаю дважды, можно ли дважды вызвать pthread_join?
Спасибо за ваше время, читая мой вопрос.
http://ideone.com/MTWpZS –
Для второго вопроса: Нет. Второй вызов 'pthread_create' будет перезаписывать переменную' pthread_t'. –
@JoachimPileborg Я понял! Спасибо @GillBates Моя версия компилятора 'gcc (Ubuntu 4.8.4-2ubuntu1 ~ 14.04.3) 4.8.4', это не работает правильно. Это проблема в каждом случае? –