C语言多线程演示

C语言多线程演示一 线程简介线程 线程是程序中的一个执行流 每个线程都有自己的专有寄存器 栈指针 程序计数器等 但代码区是共享的 即不同的线程可以执行同样的函数 多线程 多线程是指程序中包含多个执行流 即在一个程序中可以同时运行多个不同的线程来执行不同的任务 也就是说允许单个程序创建多个并行执行的线程来完成各自的任务 多线程作用 1 达到充分利用 CPU 的目的多线程完成 cpu 内核的快速切换 提高 CPU 的利用率 2 提高任务处理的效率单线程编程对于一个较大的任务来说花费较长时间 多线程会创建多个并行的线程来

一.线程简介

线程:
线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数

多线程:
多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。

多线程作用:
1.达到充分利用CPU的目的
多线程完成cpu内核的快速切换,提高CPU的利用率。




2.提高任务处理的效率
单线程编程对于一个较大的任务来说花费较长时间,多线程会创建多个并行的线程来同时完成任务。

3.验证系统的稳定性
对于测试人员来说,一个稳定的系统必须能负载多线程的场景,那么,多线程就成为验证的必要手段。

二.线程的创建和回收

1.创建线程 pthread_create
格式:
pthread_create(&thrd1, NULL, (void *)&thread_function, (void *) &argument);




说明:
thrd1:线程变量名,被创建线程的标识。
NULL:线程的属性指针,可省略为NULL。
thread_function:函数体,线程需要操作的函数。
argument:传入函数的参数








注意:
如果是多线程编程thrd1argument应该是多个。

2.结束线程 pthread_exit
格式:
pthread_exit(void *retval);
说明:
retval:存放线程结束的退出状态,可以通过这个值来判断线程是否正常退出。








3.线程等待 pthread_join
格式:
pthread_join(thrd1, NULL);
说明:
thrd1:要等待结束的线程的标识
NULL:指针thread_return指向的位置存放的是终止线程的返回状态。










pthread_join作用
1.pthread_create调用成功后,用户是不清楚哪个线程先执行,需要设置线程等待,让这些线程都执行完成后,再执行主线程,否则这些线程还没执行完,主线程就已经退出。
2.pthread_join可以用来回收线程资源,如果在线程结束时没有调用pthread_join可能会造成资源不足的情况。




#include 
  
    #include 
   
     void print(void *thrd) { for (int i=0; i<3; i++) { printf("%s:%d\n", (char*)thrd, i); } } int main() { void* reVal; pthread_t thread1, thread2, thread3; int ret1, ret2, ret3; int res1, res2, res3; char *arg1="thread1"; char *arg2="thread2"; char *arg3="thread3"; ret1 = pthread_create(&thread1, NULL, (void*)&print, (void*)arg1); ret2 = pthread_create(&thread2, NULL, (void*)&print, (void*)arg2); ret3 = pthread_create(&thread3, NULL, (void*)&print, (void*)arg3); res1=pthread_join(thread1, &reVal); res2=pthread_join(thread2, &reVal); res3=pthread_join(thread3, &reVal); return 0; } 
    
  

在这里插入图片描述
发现使用gcc 代码.c编译失败,这里需要注意一下,后面要加上 -lpthread,因为代码里使用了pthread.h里的函数,所以在gcc进行链接时,需要找到这个库。

这部分演示了简单的多线程的场景,实际应用中的场景更复杂,而且涉及到资源抢占导致数据不同步的问题,这个问题会在后面再进行讲解,通过锁的机制就可以解决。

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/176928.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午8:42
下一篇 2026年3月26日 下午8:42


相关推荐

  • ccd视觉定位教程_CCD视觉定位识别系统,视觉系统ccd定位原理[通俗易懂]

    ccd视觉定位教程_CCD视觉定位识别系统,视觉系统ccd定位原理[通俗易懂]CCD机器视觉系统是用于工业检测及识别的高科技产品,生产的核心问题是工业计算机系统选型,可采集加工品的高清图像直接传输给到机子的GPIO接口。由于数字图像处理和计算机视觉技术的迅速发展,越来越多的研究者采用摄像机作为全自主用移动机器人的感知传感器。这主要是因为原来的超声或红外传感器感知信息量有限,鲁棒性差,而视觉系统则可以弥补这些缺点。而现实世界是三维的,而投射于摄像镜头(CCD/CMOS)上的图…

    2022年6月15日
    88
  • Windows 下使用 Mingw32-make 来执行 Makefile示例[通俗易懂]

    文章目录先下载Mingw设置好环境变量确认安装环境状态gccmingw32-makeC工程测试main.cmath.ccall_math.c准备好Makefile文件执行Makefile执行前执行后运行main.exe执行Makefileclean清理文件执行前执行后整体运行演示GIFReferernces先下载Mingw这里使用的是mingw32不是64的,需要64位的自行搜索下载32位的可以参考我之前一篇的:C-BookNote-Win开发环境设置

    2022年4月8日
    173
  • Midjourney 教程!7 个提高 AI 出图质量小技巧!

    Midjourney 教程!7 个提高 AI 出图质量小技巧!

    2026年3月15日
    3
  • 几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍

    几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍富文本编辑器 富文本编辑器(RichTextEditor,RTE)是一种可内嵌于浏览器,所见即所得的文本编辑器。它提供类似于OfficeWord的编辑功能,方便那些不太懂HTML用户使用,富文本编辑器的应用非常广泛,它的历史与图文网页诞生的历史几乎一样长。 作为一个技术人员,手上备上两款富文本编辑器还是很有用的,指不定那个项目就要集成一个进去。到时候现找现用那可就费功夫了,毕竟从开…

    2022年6月10日
    367
  • MongoVUE_mongodb怎么用

    MongoVUE_mongodb怎么用一、    连接mongodb服务端:1、         双击mongoVUE,进入如下图所示界面:2、         点击上图中的“+”,出现如下图,输入要连接的mongodb服务器的ip、端口、用户名、密码以及要连接的数据库等:3、         信息填写完成后点击“test”,如果成功,则会弹出如下界面,之后点击“save”;如果不是如下界面,代表输

    2022年8月21日
    7
  • Hunyuan-MT 7B一键部署教程:基于vscode配置c/c++环境快速搭建翻译模型

    Hunyuan-MT 7B一键部署教程:基于vscode配置c/c++环境快速搭建翻译模型

    2026年3月12日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号