c同步中的多线程

时间:2015-12-15 01:43:35

标签: c multithreading pthreads

我正在尝试读取数组限制和数字,并尝试使用第一个线程和使用线程2的数组的另一半的总和找出半数的总和但是线程2在读取限制后正在运行如果数组使用线程1

var all = document.getElementsByTagName('*');
for(var i in all)
    if (all[i].style) all[i].style.cssText = window.getComputedStyle(all[i]).cssText;

编译/运行的输出:

#include <stdio.h>
#include <pthread.h>

 void *method(void *);
 int a[10];

 int main(){
   int error;
   pthread_t id1,id2;
   pthread_attr_t attr1,attr2;
   pthread_attr_init(&attr1);
   pthread_attr_init(&attr2);
   error = pthread_create(&id1,&attr1,method,(int *)0);
   error = pthread_create(&id2,&attr2,method,(int *)1);
   //wait();
   error = pthread_join(id1,NULL);
   if(error!=0){
     printf("\n Error in Joining 1");
   }
   wait();
   error = pthread_join(id2,NULL);
   if(error!=0){
     printf("\n Error in Joining 2");
   }
   return 0;
 }

 void *method(void *args){
   int ch = (int *)args;
   int i,n,sum=0;
   if(ch==0) {
     printf("\nEnter the limit : ");
     scanf("%d",&n);
     printf("\nEnter the Numbers : ");
     for (i = 0; i < n; i++) {
       scanf("%d",&a[i]);
     }
     for (i = 0; i < n/2; i++) {
       sum+=a[i];
     }
     printf("\nThe sum of first n/2 elements : %d",sum);
   } else {
     sum = 0;
     for (i = (n/2)+1; i < n; i++) {
       sum+=a[i];
     }
     printf("\nThe sum of first n elements : %d",sum);   
   }    
 }

ScreenShot

1 个答案:

答案 0 :(得分:1)

如果您不想在线程1完成之前启动线程2,则最简单的解决方法是将线程2的5.3.0移动到线程1的pthread_create之后。

但是,您仍有问题,因为pthread_joinnsum的局部变量,两个线程将分别调用method。您可以像使用method一样将这些变量移出为全局变量,或者您可以设置一个结构作为指向包含您要使用的数据的a线程函数的指针传递/更新

另请注意,让一个线程等到另一个线程完全完成后,会删除线程可能带来的任何性能提升。