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

1
Novice 5 Май 2014 в 19:31

4 ответа

Лучший ответ

Пространство для стеков всех потоков в процессе вырезано из памяти, ранее выделенной для стека процесса в целом (показано на рис.). Таким образом, завершение основной программы также завершает поток.

enter image description here

Для иллюстрации: напишите программу, создающую потоки в отсоединенном состоянии. Запустите программу с помощью gdb, и вы увидите, что поток завершается сразу после завершения программы.

Starting program: /home/avairavan/CProg/a.out [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". Main Program Starting. [New Thread 0x7ffff77f5700 (LWP 3484)] Main Program Exiting. [Thread 0x7ffff77f5700 (LWP 3484) exited]

0
Ashok Vairavan 10 Май 2014 в 18:29

Отсоединенный поток - это тот, который не нужно "ждать" с pthread_join. Когда поток возвращается, он просто очищается.

Это не влияет на время жизни потока: если какой-либо поток (включая «основной») вызывает _exit, все потоки умирают.

2
cnicutar 5 Май 2014 в 15:35

Нет, даже отсоединенные потоки будут завершены, когда завершится основной поток.

Вы используете отдельные потоки, если не хотите присоединяться к ним позже. В этом случае ОС может очистить поток без вашего присоединения к нему.

См. https://computing.llnl.gov/tutorials/pthreads/

1
Robert Harvey 5 Май 2014 в 15:37

Поток может продолжаться даже после завершения основного потока, если основной поток был завершен вызовом pthread_exit().

Отсоединенный поток не может быть присоединен, и его ресурсы освобождаются при завершении, в отличие от неотключенного потока, ресурсы которого освобождаются при присоединении.

1
alk 5 Май 2014 в 15:43