zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    MVC5+EF6 入门完整教程七
    MVC5+EF6 入门完整教程六
    MVC5+EF6 入门完整教程五
    MVC5+EF6 入门完整教程四
    MVC5 + EF6 完整入门教程三
    MVC5 + EF6 入门完整教程二
    MVC5 + EF6 入门完整教程
    最短路径简析
    PAT 1147 Heaps
    PAT 1146 Topological Order
  • 原文地址:https://www.cnblogs.com/guochaoxxl/p/14002402.html
Copyright © 2011-2022 走看看