[英]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.