qq_35314578 2016-06-14 13:04 采纳率: 0%
浏览 1365

linux下,pthread多线程编程传参的问题

写一个多线程计算矩阵的小程序,主要思路如下:
构造一个Info的结构体,通过结构体指针将参数传给线程函数,通过显式传线程的ID来控制参数。
具体程序如下

#include
#include
#include

int mtc[3] = { 0 }; // result matrix

typedef struct
{
int prank;
int *mta;
int *mtb;
}Info_t;

void* calMatrix(void* arg)
{
int i;
Info_t *info = (Info_t *)arg;
int prank = info->prank;
fprintf(stdout,"calMatrix : prank is %d\n",prank);

    for(i = 0; i < 3; i++)
            mtc[prank] += info->mta[i] * info->mtb[i];

    return NULL;

}

int main(int argc,char **argv)
{
int i,j,k = 0;
int mta[3][3];
int mtb[3] = { 1 };
Info_t *info = (Info_t *)malloc(sizeof(Info_t));

    for(i = 0; i < 3; i++)
            for(j = 0; j < 3; j++)
                    mta[i][j] = k++;
    /* 3 threads */
    pthread_t *threads = (pthread_t *)malloc(sizeof(pthread_t)*3);
    fprintf(stdout,"\n");fflush(stdout);
    for(i = 0; i < 3; i++)
    {
            info->prank = i;
            info->mta = mta[i];
            info->mtb = mtb;
            pthread_create(&threads[i],NULL,calMatrix,(void *)info);
    }
    for(i = 0; i < 3; i++)
            pthread_join(threads[i],NULL);

    fprintf(stdout,"\n==== the matrix result ====\n\n");
            fflush(stdout);

    for(i = 0; i < 3; i++)
    {
            fprintf(stdout,"mtc[%d] = %d\n",i,mtc[i]);
            fflush(stdout);
    }
    return 0;

}

利用gcc编译 gcc calMatrix.c -o test -lpthread
执行 test ./test
但是得到的结果是
图片说明
在线程函数里面,prank并没有是预期的0,1,2 ,而全部是2 ,这是为什么呢?

  • 写回答

2条回答 默认 最新

  • HeroKern 博客专家认证 2016-06-14 14:51
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序