/ / Ako sa môžem uistiť, že všetky moje c + + boost vlákna skončia pred ukončením programu? - c ++, multithreading, boost

Ako sa môžem uistiť, že všetky moje vlákna s podporou c ++ skončia pred ukončením programu? - c ++, multithreading, boost

Viem, že môžem zavolať vlákno.join () na vynútenie dokončenia vlákna pred tým, ako môže pokračovať aktuálne vlákno. Avšak, môj program má veľa súborov, ktoré sa čítajú do pamäte, upravujú a potom prepláchnu na disk. Každá flush sa vykonáva v samostatnom vlákne, takže aktuálne vlákno môže pokračovať, kým sa obsah prepláchne na disk.

Mohol by som si ponechať súbor všetkých roztrhaných nití apotom ich pripojte na konci realizácie hlavného vlákna, ale ak program beží dlhú dobu, mohlo by to byť veľké množstvo flush-threads, z ktorých väčšina bola dokončená.

Existuje nejaký spôsob, ako sa pripojiť ku všetkým aktívny vlákna pred pokračovaním a ukončením hlavného vlákna?

odpovede:

4 pre odpoveď č. 1

Ak vlákna dokončia vykonanie"už vlastne nite netečú. Nevidím tvoje obavy." I pre jedného by zvážiť použitie vlákno bazén. Ak si chcete ponechať zoznam všetkých použitých vlákien boost::thread_group, A pripájam sa všetko vlákna sú v podstate a efektívne rovnaké ako všetky aktívny vlákna od pripojenia na vlákno Not-A-Thread sa okamžite vrátia. HTH