Добрый вечер всем программистам.
Помогите советом.
Есть программа:
#define LOGFILE "/tmp/logfifo"
void* safe_delimit(void* string)
{
char *arg_pointer = (char*)string;
if(!arg_pointer){
printf("safe_delimit(): нулевой указатель string");
return;}
printf("stream: %s\n", arg_pointer);
return;
}
int main()
{
FILE* logfile;
char buffer[1024] = "";
if((logfile = fopen(LOGFILE, "r")) == (FILE *)NULL) {
printf("ошибка открытия файла %s", LOGFILE);
return -1;}
while(fgets(buffer, sizeof(buffer), logfile) != (char*) NULL) {
pthread_t child;
printf("%s", buffer);
if(pthread_create(&child, NULL, safe_delimit, buffer) != 0)
printf("ошибка создания потока\n");
else
pthread_join(child, 0); }
fclose(logfile);
return 0;
}
LOGFILE здесь является fifo файлом. Другой процесс в него постоянно пишет строки, разделенные '\n', а эта програма их читает и на каждую строку создает отдельный поток.
Если ставлю pthread_join(child, 0); , то все отлично, а если pthread_detach(child); , то начинается какая-то ерунда: когда строка считается, на нее то не создается потока, то создается сразу два потока, а то поток создается, но параметр пустой. Как я понимаю, pthread_join(child, 0); заставляет программу ждать завершения потока, а мне нужно что-бы все потоки и родительская программа были независимы.
Почему такое разное поведение при pthread_join(child, 0); и pthread_detach(child);?
Спасибо за люьые советы.
Форум —
Development
