Jak je vysvětleno v dokumentaci openpub,
pthread_exit()
opustí vlákno, které jej volá.
Ve vašem případě, protože hlavní to nazývá hlavní vlákno se ukončí, zatímco vaše vytvořená vlákna budou pokračovat v provádění. To se většinou používá v případech, kdy je hlavní vlákno vyžadováno pouze k vytvoření vláken a ponechání vláken, aby dělaly svou práci
pthread_join
pozastaví provádění vlákna, které jej vyvolalo, pokud se cílové vlákno neukončí
To je užitečné v případech, kdy chcete před dalším zpracováním v hlavním vláknu počkat na ukončení vlákna.
Obě metody zajistí, že váš proces neskončí dříve, než skončí všechna vaše vlákna.
Metoda spojení má vaše vlákno main
funkce explicitně čeká na všechna vlákna, která mají být "připojena".
pthread_exit
metoda ukončí váš main
funkce a závit řízeným způsobem. main
má tu zvláštnost, že koncovka main
jinak by byl ukončen celý váš proces včetně všech ostatních vláken.
Aby to fungovalo, musíte si být jisti, že žádné z vašich vláken nepoužívá lokální proměnné, které jsou v nich deklarovány main
funkce. Výhodou této metody je, že vaše main
nemusí znát všechna vlákna, která byla spuštěna ve vašem procesu, např. protože jiná vlákna sama vytvořila nová vlákna, která main
o ničem neví.
pthread_exit
ukončí volající vlákno při pthread_join
pozastaví provádění volajícího vlákna, dokud cílová vlákna nedokončí provádění.
Jsou docela dobře podrobně vysvětleny v dokumentaci otevřené skupiny:
- pthread_exit
- pthread_join