我正在練習一些多線程程序,但我無法確定這個輸出的邏輯。帶有pthread函數的靜態存儲
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
int print_message(void* ptr);
int main()
{
pthread_t thread1,thread2;
char *mesg1 = "Thread 1";
char *mesg2 = "Thread 2";
int iret1, iret2;
pthread_create(&thread1, NULL, print_message, (void *)mesg1);
pthread_create(&thread2, NULL, print_message, (void *)mesg2);
pthread_join(thread1,(void*)&iret1);
pthread_join(thread2, (void*)&iret2);
printf("Thread 1 return : %d\n", (int)iret1);
printf("Thread 2 return : %d\n", (int)iret2);
return 0;
}
int print_message(void *ptr)
{
char *mesg;
static int i=0;
mesg = (char *)ptr;
printf("%s\n",mesg);
i++;
return ((void*)i);
}
我期待輸出
Thread 1
Thread 2
Thread 1 return : 1
Thread 2 return : 2
,但我得到的輸出
Thread 1
Thread 2
Thread 1 return : 0
Thread 2 return : 2
可能有些請澄清一下給我?請指出是否有使用pthread函數的錯誤。