只需创建一次线程就可以在C pthread中使用它们n次

时间:2017-11-17 16:45:59

标签: c multithreading pthreads

问题是方阵乘法,我得到了顺序脚本,其中矩阵从文本文件加载。文本文件的第一行包含多少对矩阵及其尺寸。所以它们都是相同的大小并成对存储。所有对应逐一增加,结果应存储或打印在终端中。因此,我必须构建一个细粒度的代码版本,用户决定创建 n 线程,对于每对矩阵, n 线程应该采用工作的一部分。主要的问题是,我的细粒度版本,尽管得到正确的结果,比顺序版本花费更多的时间来完成这项工作,我重申了问题是我正在创建和销毁每对矩阵的线程,我我假设需要大量的时间。那么,有没有办法只创建一次这些线程,并在每次需要时调用它们?

以下是代码的一部分:

for(k=0; k<nmats; k++) {//Loading matrices from matrices.data
printf("\nMatrix #%d of %d\n",k+1,nmats);
    for(i=0; i<matrixSize; i++) {
        for(j=0; j<matrixSize; j++) {
            fscanf(fh, "%lf", &a[i][j]);
        }
    }
    for(i=0; i<matrixSize; i++) {
        for(j=0; j<matrixSize; j++) {
            fscanf(fh, "%lf", &b[i][j]);
        }
    }

    //Creation of Threads
    for(t=0; t<NUM_THREADS; t++)
    {
        //The threads are created sequentially
        rc = pthread_create(&threads[t], NULL, mm, (void *)t);

        if (rc)
        {
            printf("ERROR; return code from pthread_create() is %d\n", rc);
            exit(-1);
        }
    }
for(t=0; t<NUM_THREADS; t++)
    {

        rc = pthread_join(threads[t], &status);
        if (rc)
        {
            printf("ERROR; return code from pthread_create() is %d\n", rc);
            exit(-1);
        }
    }
    printResult(fres,results);//Calling printing function
}

文本文件应如下所示(例如1对3x3大小的矩阵):

1 3
1 -5 20
0 3 4
-2 7 9
-2 4 -3
11 8 -4
6 9 5

0 个答案:

没有答案