Я попытался создать 3 потока, чтобы делать что-то и повторять в 2 раза, я ожидал, что все потоки скроются с помощью pthread_exit(NULL)
, но кажется, что вывод показывает только один раз и, возможно, потоки только создавались один раз ...?pthread_exit confusion in for loop
Я смущен использованием pthread_exit()
.
Правильно ли, что я могу уничтожить нить, используя этот ...?
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <sys/syscall.h>
#include <sched.h>
#define gettid() syscall(__NR_gettid)
void *f1(void *a)
{
printf("f1\n");
return NULL;
}
void *f2(void *a)
{
printf("f2\n");
return NULL;
}
int main(int argc, char const *argv[])
{
/* code */
pthread_t t0,t1,t2;
int i ;
for (i = 0 ; i < 2 ; i++)
{
if (pthread_create(&t0,NULL,&f1,NULL)== -1)
printf("error 1\n");
if (pthread_create(&t1,NULL,&f2,NULL)== -1)
printf("error 2\n");
if (pthread_create(&t2,NULL,&f1,NULL)== -1)
printf("error 1\n");
pthread_join(t0,NULL);
pthread_join(t1,NULL);
pthread_join(t2,NULL);
pthread_exit(NULL);
}
return 0;
}
поэтому, если я выложу pthread_exit() из цикла, будет ли в моем случае создано 6 потоков (3 потока/цикл * 2 раза)? или я все еще получаю 3 потока, потому что второй цикл будет использовать тот же pthread_t? – KennyYang
@KennyYang: 'pthread_create()' будет вызываться три раза на две итерации, то есть шесть раз. Вторая итерация, однако, не будет выполняться до того, как три потока, созданные первым, будут объединены, и это закончится. – alk
Правильно ли, что вторая итерация использует один и тот же адрес первого итерационного потока, так что второй будет ждать, пока первый не остановится.? – KennyYang