• Что такое поток в Linux (pthread_create())?

    @res2001
    Developer, ex-admin
    У вас программа завершается раньше, чем успевает отработать поток (вывести на экран информацию). После завершения основного потока (функция main) весь процесс завершается, в т.ч. и запущенные потоки.
    Для исправления ошибки вам нужно в main() после старта потока подождать окончания его выполнения: pthread_join(). Вообще выполнять join нужно для каждого "присоединенного" потока, а по умолчанию они все присоединенные.

    Процесс - это контейнер для потоков. В каждом процесс есть минимум один поток - основной (main()). Планировщик операционной системы планирует потоки.
    Для ОС запустить поток проще и дешевле (по ресурсам), чем запустить процесс.

    Потоки позволяют какие-то задачи в вашей программе решать параллельно. Это примерно то же самое, что и запустить второй процесс для решения части задачи. Но у двух процессов разные адресные пространства, а у потоков одно. Из-за этого обмен данными между потоками гораздо проще, чем между процессами. Но, конечно, и тут есть подводные камни - гонки данных и другие связанные проблемы.

    stdin и прочие потоки ввода/вывода - это совсем другая сущность - это потоки данных.
    pthread_create() - создает поток выполнения. Ощутите разницу!
    Ответ написан
    Комментировать
  • Почему здесь выдает ERROR:Segmentation fault (core dumped)?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    char* file, file2;
    Это объявление эквивалентно
    char *file;
    char file2;

    Вы, вероятно, хотели объявить
    char *file, *file2;
    Ответ написан
    3 комментария