1

Работая с потоками и их синхронизацией.

void main (int arcg, char *arcv[])
{
  int a=atoi(arcv[1]);
  pthread_t wthread[a], rthread[a];
  for (int i=0; i<a; i++)
    {
      pthread_create(&wthread[i], NULL,kidprint, NULL);
pthread_create(&rthread[i], NULL,kidread, (void*) &wthread[i]);
    }
 for(int b=0; b<a; b++)
    {
      pthread_join(wthread[b], NULL);
      pthread_join(rthread[b], NULL);
    }
}

В pthread_create файл создается и открывается для записи

FILE *fout; 
 char fname[20];
   sprintf(fname, "%u",a);
  fout = fopen (fname, "w");

В pthread_create всё записаное в файл читается

 FILE *fin;
  char fname[20];
  sprintf(fname, "%u", *id);
  fin = fopen(fname, "r");

Вопрос : как в потоке чтения проверить, что в файл записывается что-то ?

2

Может работать с каналами? Они имеют встроенный механизм синхронизации.
Можно конечно использовать синхронизация работы с файлами man fcntl
Но зачем вам так заморачиваться, что бы синхронизировать нити, можно использовать мьютексы  или сигнальные переменные.