En C++, std :: fonction membre de type thread joinable()

En C++, le type std::thread a une fonction membre joinable(), qui est utilisée pour vérifier si un thread peut se joindre (joinable). Un thread joignable est un thread qui a été démarré et qui n'a pas encore été joint ou détaché.

La fonction joinable() renvoie une valeur booléenne, true si le thread peut se joindre, false sinon. Lorsqu'un thread est joint, son exécution sera bloquée jusqu'à ce que d'autres threads appellent la fonction join() pour le rejoindre.

utilisation de joignable

Pour un thread, vous pouvez appeler detach ou join. Les deux sont mutuellement exclusifs, ce qui signifie qu'une fois que join est appelé, detach ne peut plus être appelé, et vice versa. Juger si join ou detach a été utilisé peut utiliser joinable.

thread mythread(myth)

Si aucun détachement ou jointure n'est appelé, la valeur de retour de joinable est true

std::cout<<myth.joinable()<<std::endl;

Si detach ou join est appelé, la valeur de retour de joinable retournera false.

Le rôle de joignable

Par conséquent, joinable peut déterminer si join ou detach a été appelé pour un thread.

if(mythread.joinable())
	mythread.join();

Voici quelques scénarios d'utilisation où la fonction joinable() est particulièrement utile :

Rejoindre des threads : lorsque vous démarrez un thread et que vous souhaitez attendre qu'il se termine avant de poursuivre l'exécution du thread principal, vous pouvez utiliser la fonction joinable() pour vérifier si le thread peut être joint. Si le thread peut se joindre, la fonction join() est appelée pour attendre la fin de l'exécution du thread.

std::thread t(doSomeWork); // 启动线程
 if (t.joinable()) {
    
    
   t.join(); // 等待线程完成执行
    }

Gestion des ressources de thread : l'utilisation de la fonction joinable() peut vous aider à gérer les ressources de thread. Si un thread n'est pas joignable, vous pouvez choisir de le détacher pour libérer les ressources qui lui sont associées.

std::thread t(doSomeWork); // 启动线程 
if (t.joinable()) {
    
    
 t.detach(); // 分离线程,释放相关资源 
 }

Gestion des erreurs : lors de la gestion des exceptions ou des erreurs, vous devrez peut-être vous assurer que tous les threads sont terminés pour éviter les fuites de ressources ou un comportement indéfini. En utilisant la fonction joinable(), vous pouvez vérifier si le thread peut se joindre et gérer la condition d'erreur en conséquence.

En résumé, la fonction joinable() peut être utilisée pour vérifier si un thread peut se joindre, et se joindre ou se détacher si nécessaire. Cela permet de gérer l'ordre d'exécution et les ressources des threads, ainsi que d'assurer l'achèvement des threads

Guess you like

Origin blog.csdn.net/m0_49302377/article/details/131518438