Форкинг с многопоточностью сделает недостижимую память стека в дочернем процессе - PullRequest
0 голосов
/ 12 апреля 2019

Если процесс с многопоточными разветвлениями, то память стека других потоков будет скопирована, но недоступна.Я думаю, что это приведет к пустой трате памяти.(Поскольку дочерние потоки не копируются)

//This code describes that the copied unreachable stack exists in the copied child process.
//The variable 'buf' has different values in both processes.

int sig;
int global;
int *ptr;
void proc()
{
    pthread_t tid;
    pthread_create(&tid, NULL, thread_start, NULL);
    while (ptr == NULL);
    pid_t pid = fork();
    sig = 1;
    usleep(100000);
    if (pid)
    {
        printf("Process Response: %d, %p, %d\n", pid, ptr, *ptr);
        global = 1;
        int status;
        wait(&status);
    }
    else
    {
        printf("Process Response: %d, %p, %d\n", pid, ptr, *ptr);
        global = 2;
        exit(0);
    }
}

void *thread_start(void* data)
{
    int buf = 135;
    ptr = &buf;
    while (sig == 0);
    buf = 999;
    sig = 0;
    while (global == 0);
    printf("Thread Response: %d\n", global);
    return NULL;
}

Более того, если дочерний поток выделяет большую память в куче, растрата памяти будет иметь решающее значение.Просто я не должен писать такие программы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...