• 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
  • 相关阅读:
    085 Maximal Rectangle 最大矩形
    084 Largest Rectangle in Histogram 柱状图中最大的矩形
    083 Remove Duplicates from Sorted List 有序链表中删除重复的结点
    082 Remove Duplicates from Sorted List II 有序的链表删除重复的结点 II
    081 Search in Rotated Sorted Array II 搜索旋转排序数组 ||
    080 Remove Duplicates from Sorted Array II 从排序阵列中删除重复 II
    079 Word Search 单词搜索
    078 Subsets 子集
    bzoj2326: [HNOI2011]数学作业
    bzoj2152: 聪聪可可
  • 原文地址:https://www.cnblogs.com/guochaoxxl/p/14002402.html
Copyright © 2020-2023  润新知