我开始在Linux上进行pthread编程,而在最初的程序中,我完全感到困惑。下面是我正在运行的程序
#include <stdio.h> #include <stdlib.h> #include <pthread.h> void *print_message_function( void *ptr ); int main(){ pthread_t thread1, thread2; char *message1 = "Thread 1"; char *message2 = "Thread 2"; int iret1, iret2; /* Create independent threads each of which will execute function */ iret1 = pthread_create( &thread1, NULL, print_message_function, (void*) message1); iret2 = pthread_create( &thread2, NULL, print_message_function, (void*) message2); /* Wait till threads are complete before main continues. Unless we */ /* wait we run the risk of executing an exit which will terminate */ /* the process and all threads before the threads have completed. */ pthread_join( thread1, NULL); printf("amit"); pthread_join( thread2, NULL); printf("Thread 1 returns: %d\n",iret1); printf("Thread 2 returns: %d\n",iret2); exit(0); } void *print_message_function( void *ptr ){ char *message; message = (char *) ptr; printf("%s \n", message); }
我想知道的第一件事是线程执行的顺序不是顺序的?
第二件事是我故意放置print(“ amit”); 看到main确实在线程1终止期间停止了,但是在输出中我们看到的是首先执行了printf语句。整个过程的输出是
线程1
线程2
amitThread 1返回:0
线程2返回:0
我想知道的第一件事是线程执行的顺序不是顺序的吗?
不正常。大多数现代操作系统上的线程(Linux上的早期线程实现使用协作式多任务处理)并行执行,并且执行的顺序在printf某种程度上是不确定的。在pthread_join小号强加一些事情的排序,所以:
printf
pthread_join
Thread 1
Amit
Amit1
Thread 2``Thread 1 returns:
main
我希望能回答您的问题。我不确定您要问什么,但随时可以要求澄清。