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
", 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
", 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
原文地址:https://www.cnblogs.com/guochaoxxl/p/14002402.html