Я видел следующий фрагмент кода для потоковой передачи в Linux в Интернете. Но когда я запускаю его, все потоки, похоже, спят вместо основного потока. Зачем? Кроме того, без сна (5) утверждение «Успешно созданный поток» выполняется 3 раза вместо 2? Может ли кто-нибудь объяснить это поведение? Благодаря Составлено с использованием: НКУ -pthread check.cПочему все мои потоки спали, используя sleep()?
и мое о/р: Первый поток processingn Тема создана successfullyn Второй поток processingn Тема создана successfullyn
Первые две строки печатаются с отставание 5 секунд и следующие 2 через 5 секунд. Почему дочерние потоки спали вместо основного?
#include<stdio.h>
#include<string.h>
#include<pthread.h>
#include<stdlib.h>
#include<unistd.h>
pthread_t tid[2];
void* doSomeThing()
{
unsigned long i = 0;
pthread_t id = pthread_self();
if (pthread_equal(id,tid[0]))
{
printf("\n First thread processingn");
}
else
{
printf("\n Second thread processingn");
}
return NULL;
}
int main(void)
{
int i = 0;
int err;
while (i < 2)
{
err = pthread_create(&(tid[i]), NULL, &doSomeThing, NULL);
sleep(5);
if (err != 0)
printf("\ncan't create thread [%s]", strerror(err))
else
printf("\n Thread created successfullyn");
i++;
// sleep(5);
}
pthread_join(tid[0],NULL);
pthread_join(tid[1],NULL);
return 0;
}
Почему 'doSomeThing' занимает' void arg'? – user2357112
Возможно, вам понравилось читать «* detached *» vs. «* joinable *» состояние потока, чтобы понять, почему ваши потоки не выглядят так, как будто они закончились. Для справки: http://man7.org/linux/man-pages/man3/pthread_attr_setdetachstate.3.html – alk
Как вы написали, ваш код не компилируется. (должен быть 'void * arg', но вы написали' void arg') –