多线程并行计算数据总和 C语言demo

多线程计算整型数组数据总和:

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include<process.h>
#include <time.h>
#define N 1024

struct Myinfo
{
    int *pstart;//开始地址
    int length;//长度
    int id;//线程编号
    int sum;//存储数据的和
};
void  add(void *p) //void *p可以保存任何类型的指针
{
    struct Myinfo *pinfo = p;
    for (int i = 0; i < pinfo->length;i++)
    {
        pinfo->sum += pinfo->pstart[i];
    }
    printf("\n线程%d计算的结果%d", pinfo->id, pinfo->sum);
}

void main()
{
    time_t ts;
    unsigned int num = time(&ts);//传递地址
    srand(num);
    int data[N] = { 0 };   // 进行赋值
    for (int i = 0; i < N; i++)
    {
        data[i] = rand() % 1000;
        //printf("%4d", data[i] = rand() % 1000);
    }
    int sum = 0;   //计算总和
    for (int i = 0; i < N; i++)
    {
        sum += data[i];
    }
    printf("\n总和=%d", sum);

    struct Myinfo info[8] = { 0 };
    for (int i = 0; i < 8;i++)
    {
        info[i].id = i;
        info[i].length = N / 8;
        info[i].sum = 0;
        info[i].pstart = data + i*N / 8; //注意这里地址的移动
        _beginthread(add, 0, &info[i]);
    }
    system("pause");

    int lastsum=0;
    for (int i = 0; i < 8;i++)
    {
        lastsum += info[i].sum;
    }
    printf("\n多线程总和=%d", lastsum);
    system("pause");
}

在此也可以结合队列来使用

时间: 2024-11-06 09:51:44

多线程并行计算数据总和 C语言demo的相关文章

java8新特性(六):Stream多线程并行数据处理

转:http://blog.csdn.net/sunjin9418/article/details/53143588 将一个顺序执行的流转变成一个并发的流只要调用 parallel()方法 public static long parallelSum(long n){    return Stream.iterate(1L, i -> i +1).limit(n).parallel().reduce(0L,Long::sum); } 并行流就是一个把内容分成多个数据块,并用不不同的线程分别处理每

C++ boost库无锁队列多线程并行测试与编译方法

阅读了网络中关于Boost库无锁队列的源代码,但却缺少编译方法.经过测试,确定了ubuntu 14.04中编译boost库的方法,特做记录. 无锁(free-lock)是实现高性能多线程并发编程的重要技术. 作为C++11 STL参考实现的boost库,不仅支持11标准,而且做了许多扩展,掌握其使用方法,对于提高代码质量,尤其重要. 以其多线程并行无锁队列为例,结合代码和说明,演示了无锁boost库的使用和编译方法. 代码及说明如下: //source: boost_queue.cpp //目的

iOS开发--多线程 并行开发

概览 大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算.可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行.但是机器码是按顺序执行的,一个复杂的多步操作只能一步步按顺序逐个执行.改变这种状况可以从两个角度出发:对于单核处理器,可以将多个步骤放到不同的线程,这样一来用户完成UI操作后其他后续任务在其他线程中,当CPU空闲时会继续执行,而此时对于用户而言可以继续进行其他操作:对于多核处理器,如果用户在UI线程中完成某个操作之后,其他后续操作在别的线程

C#中的多线程 - 并行编程 z

原文:http://www.albahari.com/threading/part5.aspx 专题:C#中的多线程 1并行编程Permalink 在这一部分,我们讨论 Framework 4.0 加入的多线程 API,它们可以充分利用多核处理器. 并行 LINQ(Parallel LINQ)或称为 PLINQ Parallel类 任务并行(task parallelism)构造 SpinLock 和 SpinWait 这些 API 可以统称为 PFX(Parallel Framework,并行

多核CPU上python多线程并行的一个假象

GIL 与 Python 线程的纠葛 GIL 是什么东西?它对我们的 python 程序会产生什么样的影响?我们先来看一个问题.运行下面这段 python 程序,CPU 占用率是多少? # 请勿在工作中模仿,危险:) def dead_loop(): while True: pass dead_loop() 答案是什么呢,占用 100% CPU?那是单核!还得是没有超线程的古董 CPU.在我的双核 CPU 上,这个死循环只会吃掉我一个核的工作负荷,也就是只占用 50% CPU.那如何能让它在双核

多核CPU上python多线程并行的一个假象(转)

转自:http://www.cnblogs.com/skying555/p/6527189.html GIL 与 Python 线程的纠葛 GIL 是什么东西?它对我们的 python 程序会产生什么样的影响?我们先来看一个问题.运行下面这段 python 程序,CPU 占用率是多少? # 请勿在工作中模仿,危险:) def dead_loop(): while True: pass dead_loop() 答案是什么呢,占用 100% CPU?那是单核!还得是没有超线程的古董 CPU.在我的双

Oracle多线程并行使用、关联与指定索引执行

CREATE TABLE T_SMAINT_2016012703 parallel 4 nologging AS SELECT /*+parallel(4) leading(s a) use_hash(A) index(s IDX_CS_SERVICE_RECORD_MD2_04) */S.SMAINT_ID, S.SMAINT_DESC FROM T_CS_SERVICE_RECORD S JOIN T_CD_MAINT A ON A.SMAINT_ID = S.SMAINT_ID AND S

单线程排序和利用Fork/Join进行多线程并行排序的简单对比

Fork/Join框架自从在JDK7中引进之后,对并行计算的设计带来了更多便利. 本文使用java原生的排序方法Array.sort单线程排序,和利用Fork/Join框架进行任务分割设计的快速排序进行对比. 首先,使用以下方法构造一个简单的文件样本,目标是生成一个文本文件,10000000行,每行为一个20000以内的随机数: package sort; import java.io.File; import java.io.FileWriter; import java.io.IOExcep

[转]TestNG的多线程并行

前言 最近在做项目里的自动化测试工作,使用的是TestNG测试框架,主要涉及的测试类型有接口测试以及基于业务实际场景的场景化测试.由于涉及的场景大多都是大数据的作业开发及执行(如MapReduce.Spark.Hql等任务的执行),而这些任务的执行都需要耗费较多的时间.举一个普遍的例子,其中一条场景测试用例是: 执行一个MapReduce作业,校验作业的执行结果和执行日志. 对于一个最简单的MR任务,如果YARN集群资源充足,它的执行时间也要花上将近一分钟的时间.更不用说当YARN集群计算资源饱