У вас есть очевидная опечатка в вашем printf("main/n");
, а не printf("main\n");
(или просто puts("main");
), но это деталь, а не причина, по которой ваша программа никогда не завершит
в vlakno1 вы создаете тупик, выполняя:
if(poc_precitanych == 0){
pthread_exit(NULL);
}
, поскольку вы не разблокируете мьютекст, должно быть
if(poc_precitanych == 0){
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
}
у вас та же проблема в vlakno2 :
if(pocet_pisanych == 0){
pthread_exit(NULL);
}
должно быть
if(pocet_pisanych == 0){
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
}
Следующее также странно:
pocet_pisanych = fwrite(a, sizeof(char),poc_precitanych, stdout);
if(pocet_pisanych == 0){
pthread_exit(NULL);
}
даже это не невозможно, трудно написатьна stdou без успеха.Таким образом, единственный шанс для вас выйти из этого цикла - иметь poc_precitanych
, оценивающий 0
Дополнительное замечание, вы #define V 300
, но вы делаете char a[300];
, пока используете V в другом месте.Лучше сделать char a[V];
или использовать sizeof(a)
в другом месте без определения V
Примеры выполнения после изменений:
/tmp % ./a.out < /dev/null
main
vlakno 1vlakno 2
читать нечего, поэтому poc_precitanych
значения 0 и два потока заканчиваются, но
/tmp % echo "1 2 3" | ./a.out
main
vlakno 1vlakno 1vlakno 21 2 3
^C