Maison  >  Article  >  développement back-end  >  Comment transmettre les références d'objets de la bibliothèque standard C aux threads sans erreurs de compilation ?

Comment transmettre les références d'objets de la bibliothèque standard C aux threads sans erreurs de compilation ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-20 15:29:11286parcourir

How to Pass C   Standard Library Object References to Threads Without Compilation Errors?

Passer des arguments de référence d'objet aux fonctions de thread : surmonter les erreurs de compilation

Passer des références aux objets de la bibliothèque standard C 11, tels que std::ostream , les fonctions de thread peuvent rencontrer des problèmes de compilation. En effet, les threads, par défaut, copient leurs arguments.

Pour transmettre explicitement une référence, enveloppez-la avec std::ref ou std::cref pour les références constantes. Voici une version modifiée de l'exemple fourni :

void foo(std::ostream &os) {
    // Do something with os
    os << "This should be printed to os" << std::endl;
}

int main() {
    std::thread t(foo, std::ref(std::cout));
    t.join(); // Wait for the thread to complete
    return 0;
}

En utilisant std::ref, vous créez un wrapper de référence qui se comporte comme un objet sémantique de valeur. Plusieurs copies du wrapper feront référence à la même référence sous-jacente, permettant au thread d'accéder correctement à l'objet std::ostream.

N'oubliez pas de vous assurer que l'objet référencé reste valide tout au long de la durée de vie du thread.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn