Linux Pthread论点

thl*_*ood 4 c linux posix pthreads

这是我的代码.这很简单.

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

void *func(void *arg)
{
    printf("ID=%d\n", *(int*)arg);
    pthread_exit(NULL);
}

int main()
{
    pthread_t pt[4];
    int i;

    for (i = 0; i < 4; i++)
    {
        int temp = i;
        pthread_create(&pt[i], NULL, func, (void*)&temp);
    }
    sleep(1);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我编译了它:

gcc p_test.c -lpthread

我跑了 它印了2 2 3 3.我又跑了 它印了2 3 3 2.

我的问题是:

为什么23打印两次?

为什么没有打印1 3 2 0或任何其他结果?

Phi*_*all 7

这里的主要问题是你正在获取局部变量的地址temp,然后在变量范围之外使用该指针 - 一旦退出循环的一次迭代,你的指针temp变为无效,你不能取消引用它.