在Linux上执行pthread [英] pthread execution on linux
问题描述
我开始在Linux上进行pthread编程,而在最初的程序中,我完全感到困惑.下面是我正在运行的程序
I started doing pthread programming on linux and at the very first programme i got totally confused. Below is the programme I am running
#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);
}
我想知道的第一件事是线程执行的顺序不是顺序的?
First one thing i would like to know is order of thread execution is not sequential ??
第二件事是我故意放置print("amit");看到main确实在线程1终止期间停止了,但是在输出中我们看到的是首先执行了printf语句.整个过程的输出是
Second thing is i intensionally put print("amit"); to see main is really halt during thread1 getting terminated but in the output what we can see is printf statement is executed first. The output of whole process is
线程1
线程2
amitThread 1返回:0
amitThread 1 returns: 0
线程2返回:0
推荐答案
我想知道的第一件事是线程执行的顺序不是顺序的吗?
First one thing i would like to know is order of thread execution is not sequential ?
不正常.大多数现代操作系统上的线程(Linux上的早期线程实现使用协作式多任务)并行执行,并且printf
的执行顺序部分不确定. pthread_join
对事物施加一些顺序,所以:
Not normally. Threads on most modern operating systems (early threading implementations on Linux used cooperative multitasking) execute in parallel and the order in which your printf
s get executed is partially non deterministic. The pthread_join
s impose some ordering on things, so:
-
Thread 1
必须在Amit
之前,因为主线程在打印Amit1
之前要等待线程1完成.
由于第二个 -
Thread 2
必须在Thread 1 returns:
之前.main
中的所有printf
均以它们在main
中出现的顺序出现.
pthread_join
,Thread 1
must come beforeAmit
because the main thread waits for thread 1 to finish before printingAmit1
Thread 2
must come beforeThread 1 returns:
because of the secondpthread_join
. All of theprintf
s inmain
appear in the order they appear inmain
.
我希望能回答您的问题.我不确定您要问什么,但随时可以要求澄清.
I hope that answers your question. I'm not entirely sure what you were asking but feel free to ask for clarification on any point.
这篇关于在Linux上执行pthread的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!