在Linux上执行pthread [英] pthread execution on linux

查看:84
本文介绍了在Linux上执行pthread的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我开始在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 printfs get executed is partially non deterministic. The pthread_joins impose some ordering on things, so:

  • Thread 1必须在Amit之前,因为主线程在打印Amit1
  • 之前要等待线程1完成. 由于第二个pthread_join
  • Thread 2必须在Thread 1 returns:之前. main中的所有printf均以它们在main中出现的顺序出现.
  • Thread 1 must come before Amit because the main thread waits for thread 1 to finish before printing Amit1
  • Thread 2 must come before Thread 1 returns: because of the second pthread_join. All of the printfs in main appear in the order they appear in main.

我希望能回答您的问题.我不确定您要问什么,但随时可以要求澄清.

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆