Вот такая прога не работает.
Здесь оба потока создаются нормально, один начинает писать в свой файл, сообщая каждую секунду write OK. Однако второй поток вообще ничего не сообщает, вызов select подвисает. Подскажите, плиз, в чем тут дело.
int mypipe[2];
void * start1(void*p)
{
int i;
char buf[1];
int err;
for(i=0;i<10;++i) {
sleep(1);
buf[0] = (char)i;
if(write(mypipe[1], buf, 1) < 0) {
perror("thread1: write error:");
break;
}
}
return NULL;
}
void * start2(void*p)
{
int i;
int err;
char buf[1];
fd_set s;
for(i = 0; i < 15; ++i) {
FD_ZERO(&s);
FD_SET(mypipe[0], &s);
if((err=select(1, &s, NULL, NULL, NULL)) < 0) {
perror("thread2: file descriptors select error:");
break;
}
else if(err == 0)
printf("select timeout\n");
if(read(mypipe[0], buf, 1) < 0) {
perror("thread2: read error:");
break;
}
else
printf("data received: %d\n", buf[0]);
}
return NULL;
}
int main()
{
pthread_t th1, th2;
int err;
if((err = pipe(mypipe)) != 0) {
perror("error creating pipe: ");
return 1;
}
pthread_create(&th2, NULL, start2, NULL);
pthread_create(&th1, NULL, start1, NULL);
return 0;
}


Ответ на:
комментарий
от Dead
Ответ на:
комментарий
от Dead
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум помогите с select/pipe, плииииз... (2003)
- Форум вопрос про select() (2013)
- Форум fifo между wine приложением и не wine (2015)
- Форум Консольный обмен сообщениями (2017)
- Форум «Hello world» глючит (2015)
- Форум Баги в select! (2003)
- Форум Помогите разобраться с многопоточностью (2014)
- Форум select (2006)
- Форум Потоки. Не отрабатывается функция потока. С#. (2013)
- Форум Pipe (2011)