C 第二次启动pthreads时出现SEGFULT

C 第二次启动pthreads时出现SEGFULT,c,segmentation-fault,pthreads,C,Segmentation Fault,Pthreads,我有一个程序,可以进行一些计算等,并使用pthreads来启动一些线程。这很有效 但是,对于基准类型的事情,我需要多次启动同一组线程。当我第二次启动它们时,我得到一个segfault(堆芯转储) 所选代码: pastebin备选方案(缺少第一行互斥) 应包括与问题相关的任何内容: 我们一直在尝试删除对现有变量的任何依赖,但第二次仍然失败 提前感谢您的回复。我甚至不知道这是如何编译的。真正的程序在哪里?大约有2k行代码。我包括了我提到的相关部分,所以,你要做的第一件事是减少或重写你的程序到一个非

我有一个程序,可以进行一些计算等,并使用pthreads来启动一些线程。这很有效

但是,对于基准类型的事情,我需要多次启动同一组线程。当我第二次启动它们时,我得到一个segfault(堆芯转储)

所选代码:

pastebin备选方案(缺少第一行互斥) 应包括与问题相关的任何内容:

我们一直在尝试删除对现有变量的任何依赖,但第二次仍然失败


提前感谢您的回复。

我甚至不知道这是如何编译的。真正的程序在哪里?大约有2k行代码。我包括了我提到的相关部分,所以,你要做的第一件事是减少或重写你的程序到一个非常小的例子。这可能会告诉你bug的确切位置,而你不需要我们。是的,你说得对,精简版确实有效。这使得它在发生故障的地方崩溃稍微有点奇怪。我将自己进一步调查此事。我确信在加入pthread之后,我在创建pthread的过程中犯了一些错误。谢谢
function()
{
pthread_mutex_t pmutex;
for (int k = 0; k < 10; k++)
{
    pthread_mutex_lock (&pmutex);

    pthread_t pthreads[CPUTHRDS];
    launch_threads(pthreads);

    /* Unlock and start timer */
    pthread_mutex_unlock (&pmutex);
    tot_time = -msecond();

    /* Join taskthreads when they are done */
    join_threads(pthreads);
    tot_time += msecond();

    //<do something>
}
}

void launch_threads(pthread_t *pthreads)
{
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);

printf("#HOST# Starting Task Threads\n");    

/* Launch the CPU threads */
for (int i = 0; i < CPUTHRDS; i++)
{
    fprintf(stderr, "launchthread %d\n", i);
    int rc = pthread_create(&pthreads[i], &attr, cpu_thread, NULL);
    if (rc) {
        printf("ERROR; return code from pthread_create() is %d\n", rc);
        exit(-1);
    }
}
printf("#HOST# CPU-Threads started: %d\n", CPUTHRDS);

pthread_attr_destroy(&attr);
}

void join_threads(pthread_t *pthreads)
{
int rc = 0;
for(int i=0; i < CPUTHRDS; i++)
    {
        void *status;
        rc = pthread_join(pthreads[i], &status);
        if (rc) {
            printf("ERROR; return code from pthread_join() is %d\n", rc);
            exit(-1);
        }
        printf("#HOST# Thread %d joined\n", i);
    }
    printf("#HOST# All threads joined\n");
}

void *cpu_thread(void *arg)
{
unsigned long thid = pthread_self();
fprintf(stderr, "started %lu\n", thid);
}
#HOST# Starting Task Threads
launchthread 0
launchthread 1
#HOST# CPU-Threads started: 2
started 46969086678784
started 46969084577536
#HOST# Thread 0 joined
#HOST# Thread 1 joined
#HOST# All threads joined
#HOST# Starting Task Threads
launchthread 0
Segmentation fault (core dumped)