Linux下多线程编程之——多线程委托模型
一、多线程:
系统中运行的程序都是一个进程,进程包含一到多个进程,进程执行时需要一定的资源。线程可以是一组指令的集合或特殊的程序段,可以在程序里独立执行,可将其理解为代码运行的上下文,可以将其当作轻量级的进程,主要实现单个程序里执行多个任务。由于进程的创建、切换、调度和销毁时窜在速度慢,内存和资源消耗大,进程中的多线程的创建、切换、调度和销毁比进程轻量多了,多线程编程复杂,调试难,可靠性不高等缺点。总体来说,多线程编程是有效提升程序运行速度的不二选择。
二、委托模型:
将线程分为:主线程和工作线程,先从主线程开始运行,工作线程有主线程根据情况完成工作线程的创建,将创建好的工作线程放入队列中,有工作时,主线程唤醒工作参与工作。如果工作线程产生异常,主线程可以关闭工作线程并开启新的工作线程。
主线程常常由主函数充当,通过pthread_create()函数完成线程的创建,其中:
第一个参数: 指向线程标识符的指针,pthread_t *thread,
第二个参数:设置线程属性,const pthread_attr_t *attr,
第三个参数:线程运行函数的起始地址, void *(*start_routine) (void *),
第四个参数:线程运行函数的参数,参数多于一个时,可以传入结构体指针, void *arg,
三,代码test7_2.c
1 //This is c program code! 2 /* *=+=+=+=+* *** *=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+= += 3 * 文档信息: *** :~/test7_2.c 4 * 版权声明: *** :(魎魍魅魑)MIT 5 * 联络信箱: *** :guochaoxxl@163.com 6 * 创建时间: *** :2020年11月17日的下午04:10 7 * 文档用途: *** :数据结构与算法分析-c语言描述 8 * 作者信息: *** :guochaoxxl(http://cnblogs.com/guochaoxxl) 9 * 修订时间: *** :2020年第46周 11月17日 星期二 下午04:10 (第322天) 10 * 文件描述: *** :自行添加 11 * *+=+=+=+=* *** *+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ =+*/ 12 #include <stdio.h> 13 #include <pthread.h> 14 15 void *myComadd(void *iData){ 16 int sum = 0; 17 int *data = (int *)(iData); 18 for(int i = 1; i <= *data; i++){ 19 sum += i; 20 } 21 printf("add result: %d\n", sum); 22 23 return; 24 } 25 26 void *myCommul(void *iData){ 27 int sum = 1; 28 int *data = (int *)(iData); 29 for(int i = 1; i <= *data; i++){ 30 sum *= i; 31 } 32 printf("mul result: %d\n", sum); 33 34 return; 35 } 36 37 int main(int argc, char **argv) 38 { 39 pthread_t threadA; 40 pthread_t threadB; 41 int n = 9; 42 43 pthread_create(&threadA, NULL, myComadd, &n); 44 pthread_create(&threadB, NULL, myCommul, &n); 45 46 pthread_join(threadA, NULL); 47 pthread_join(threadB, NULL); 48 49 return 0; 50 }
程序编译,通过-lpthread添加多线程编程支持:
gcc test7_2.c -o test7_2 -lpthread
结果为:
add result: 45 mul result: 362880
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2019-11-18 我为什么选择Vim