Remarque sur la relation entre les variables locales fork, thread et thread
fourche et fil_local
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <pthread.h>
#include <thread>
static __thread int val = 0;
int main()
{
int p_id;
int status;
int return_code = 0;
printf("%d :Val de début du processus parent= %d\n", getpid(), val);
val = 1000;
auto th = std::thread([]{
printf("%d :thread start val= %d\n", getpid(), val);
val = 100;
printf("%d :fin de filetage val= %d\n", getpid(), val);
});
if ((p_id = fork()) == 0) {
/*Processus enfant*/
printf("%d :Val de début de processus enfant= %d\n", getpid(), val);
sleep(1);
val = 200;
printf("%d :Fin du processus enfant val= %d\n", getpid(), val);
} else {
/*Processus parent*/
if (p_id == -1) {
exit(EXIT_FAILURE);
}
wait(&status);
printf("%d :Val de fin de processus parent= %d\n", getpid(), val);
}
th.join();
return 0;
}
Créer et exécuter des résultats
$ g++ -std=c++11 fork_and_threadlocal.cpp -pthread
$ ./a.out
11217 :Val de début du processus parent= 0
11217 :thread start val= 0 //La valeur initiale est 0 au lieu de 1000
11217 :fin de filetage val= 100
11219 :Val de début de processus enfant= 1000 //Copiez la valeur dans le processus parent tel qu'il est lors de la fourche(Ou toujours partagé par COW?)A été
11219 :Fin du processus enfant val= 200
11217 :Val de fin de processus parent= 1000 //Insensible aux modifications des processus enfants
La variable thread_local n'est pas passée à son état initial (0 cette fois), ce qui n'est pas surprenant en raison des spécifications de fork
.
Cependant, il semble que exec * soit généralement appelé après fork, donc il peut ne pas être pertinent lors de son utilisation réelle.
Man page of FORK fork - Wikipedia [Génération et nettoyage de processus de discussion technique (Linux C ++) - Page d'accueil de Tsubasa](http://www.himajin2001.com/fswiki/wiki.cgi?page=%B5%BB%BD%D1%C5% AA% BB% A8% C3% CC-% A5% D7% A5% ED% A5% BB% A5% B9% A4% CE% C0% B8% C0% AE% A4% C8% B8% E5% BB% CF % CB% F6 (Linux% 20C% 2B% 2B% CA% D4)) Coûts associés au changement de contexte multithread - Journal Hatena de Naoya
Recommended Posts