Linux 上的 pthread 执行
- 2024-11-04 08:42:00
- admin 原创
- 33
问题描述:
我开始在 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
",iret1);
printf("Thread 2 returns: %d
",iret2);
exit(0);
}
void *print_message_function( void *ptr ){
char *message;
message = (char *) ptr;
printf("%s
", message);
}
首先我想知道的是线程执行的顺序不是连续的??
第二件事是我故意输入 print("amit"); 来查看 main 在线程 1 终止期间确实停止了,但在输出中我们可以看到 printf 语句首先被执行。整个过程的输出是
线程 1
线程 2
amitThread 1 返回:0
线程 2 返回:0
解决方案 1:
您说得对,线程执行的顺序不是连续的。在某种程度上,这就是使用线程的全部意义,即同时运行其他任务。
您看到的输出符合预期,但可能会有所不同。
也许这会有所帮助:
main thread1 thread2
|
|--create--------+-----------\n | | |
| "Thread 1" | "Thread 2" can
| | |<- occur anywhere
| / | along this line
join(1) --------- |
| |
| |
"amit" |
| |
| |
join(2) ---------------------/
|
|
"Thread 1 returns"
"Thread 2 returns"
|
exit(0)
您唯一能得到的保证是:
“
Thread 1
” 总是会在“amit
” 之前打印(因为pthread_join()
要等待线程 1 结束后主程序才能继续进行)在两个线程都终止之后, “
Thread X returns ...
”语句将始终出现在最后。
解决方案 2:
首先我想知道的是线程执行的顺序是不是连续的?
通常不会。大多数现代操作系统上的线程(Linux 上的早期线程实现使用了协作式多任务处理)都是并行执行的,并且printf
执行 s 的顺序部分是不确定的。pthread_join
s 对事物施加了一些排序,因此:
Thread 1
必须在之前,Amit
因为主线程要等待线程 1 完成后才能打印Amit1
Thread 2
`Thread 1 returns:因为第二个,所以必须放在前面。中的
pthread_join所有s 都按照它们在 中的顺序出现。
printfmain
main`
我希望这能回答你的问题。我不太清楚你在问什么,但你可以随时询问任何一点以澄清问题。
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD