簡體   English   中英

C-pthread_create-Clang GCC的區別

[英]C - pthread_create - Clang GCC difference

通過clang(3.6.1)和gcc(5.1.0)將參數傳遞給pthread_create會為一個奇怪的情況帶來不同的結果,如下所示:

pthread_t spawn_bserver_thread(uint16_t portno)
{   
    pthread_t tid;
    int32_t sockfd = create_bserver(portno);
    set_nonblocking(sockfd);

    exit_ncurses();
    printf("%d\n", sockfd);

    if(pthread_create(&tid, NULL, bserver_thread, &sockfd) != 0)
        error("pthread_create");

    return tid;
}

和bserver_thread:

static void * bserver_thread(void *arg)
{
    printf("%d\n", *(int32_t*)arg);
    exit(1);
    ...
}

使用gcc,它會打印相同的數字,但不會打印出clang。 (我的典型結果是使用gcc為4和4,但是使用clang為4然后是32767)。 我在這里做錯什么了嗎?

以下是CFLAGS,如果它可以更改任何內容:-Wall -Wextra -ggdb

問題很可能是您無法控制線程何時開始運行,因此spawn_bserver_thread函數可能在線程函數啟動之前退出,這意味着sockfd變量超出范圍,並且bserver_thread函數的指針參數不再有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM