Question Le standard C ++ prend-il en charge les processus?


Je sais que C ++ 11 a ajouté un support pour les threads. Par exemple:

#include <iostream>
#include <thread>

void bar()
{
    std::cout << "bar()\n";
}

int main()
{
    std::thread thread(bar);
    thread.join();

    return 0;
}

Cependant, existe-t-il un moyen d'exécuter le bar fonctionner dans un processus séparé? Si ce n'est pas le cas, y a-t-il une discussion sur la possibilité d'ajouter une telle fonctionnalité?

Remarque: Je suis conscient de la possibilité d'utiliser des bibliothèques indépendantes de la plate-forme et je suis juste curieux de savoir si le C ++ le supporte directement ou le fera à l'avenir.


17
2018-02-09 19:27


origine


Réponses:


Non, le standard c ++ (en particulier C ++ 11) n’a aucune notion de processus (Je ne peux donc pas vous donner ici une référence plus raisonnable en tant que résultat de la recherche à partir du site de documentation c ++ le plus populaire et le plus actuel.

Je ne suis pas conscient non plus que le support de processus est prévu pour la prochaine version standard C ++ - 17 (alias C ++ - 1z). Au moins le Site Wikipedia n'en parle pas.

Il y a un populaire la mise en oeuvre cela a été proposé pour le boost, mais cela n'a jamais été dessiné pour une proposition standard C ++.

Vous ne pouvez généralement pas écrire de code portable pour exécuter sur des systèmes nus, où un seul processus existe


Cependant, existe-t-il un moyen d'exécuter le bar() fonctionner dans un processus séparé?

L'option la plus simple est de se replier sur fork() et wait() comme spécifié par POSIX Open Group:

#include <iostream>
#include <unistd.h>
#include <sys/wait.h>

void bar()
{
    std::cout << "bar()\n";
}    

int main(int argc, char **argv)
{
    pid_t pid = fork();

    if (pid == 0)
    {
        // child process
        bar();
    }
    else if (pid > 0)
    {
        // parent process
        wait(NULL);    
    }
    else
    {
        // fork failed
        std::cerr << "fork() failed!" << std::endl;
        return 1;
    }


    return 0;
}

Bien que je ne vois pas grand chose à créer un processus supplémentaire pour exécuter une fonction simple. Créer un processus crée beaucoup de surcharge que vous ne voulez pas dans un tel cas.

Eh bien, si vous voulez démarrer un autre programme en utilisant les fonctions du exec() fonction famille qui est un cas d'utilisation différent.

Je recommande de s'en tenir à std::threads pour votre exemple.


7
2018-02-09 19:43