当我使用pthread_create时发生段错误

问题描述 投票:0回答:1

我想创建线程来从外部执行任务, 然而,

pthread_create
会导致分割错误,但结果值为
0

如果我仅使用

thread_function
设置
;
而没有任何其他代码,它也会失败。

typedef struct {
    int                socket;     
    int                login_state;  
    int                connect_state; 
    int                send_length;    
    ATW_TReqParams*    thread_aparams; 
    void (*ATWFtpNotify)(ATW_TReqParams* AParams);     
}ThreadData;

pthread_t worker_thread;
ThreadData* thread_data = NULL;

void* thread_function(void* arg) {
    if (arg == NULL) {
        return NULL;
    }

    ThreadData* data = (ThreadData*)arg;

    while (data != NULL) {
        pthread_mutex_lock(&task_mutex);

        while (data->ATWFtpNotify == NULL) {
            pthread_cond_wait(&task_condition, &task_mutex);
        }

        if (data->ATWFtpNotify != NULL) {

            data->ATWFtpNotify(data);

            data->ATWFtpNotify = NULL;
        }

        pthread_mutex_unlock(&task_mutex);
    }
}

int ATWPlusOpen(int AChipNo)
{
    int result = 1;

    if (thread_data == NULL)
        thread_data = (ThreadData*)malloc(sizeof(ThreadData));
    if (thread_data != NULL) {
        thread_data->socket = -1;
        thread_data->login_state = 0;
        thread_data->connect_state = 0;
        thread_data->thread_aparams = NULL;
        thread_data->ATWFtpNotify = NULL;
        result = pthread_create(&worker_thread, NULL, thread_function, thread_data);
    }
    return result;
}
c segmentation-fault pthreads
1个回答
0
投票

一个错误是您的线程回调在某些执行路径中缺少

return
。这意味着每次线程完成时它可能会崩溃。如果您启用编译器警告并注意它们,那么这个错误就会被发现。也可能存在其他错误。

© www.soinside.com 2019 - 2024. All rights reserved.