我正在尝试读取数组限制和数字,并尝试使用第一个线程和使用线程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);
}
}
答案 0 :(得分:1)
如果您不想在线程1完成之前启动线程2,则最简单的解决方法是将线程2的5.3.0
移动到线程1的pthread_create
之后。
但是,您仍有问题,因为pthread_join
和n
是sum
的局部变量,两个线程将分别调用method
。您可以像使用method
一样将这些变量移出为全局变量,或者您可以设置一个结构作为指向包含您要使用的数据的a
线程函数的指针传递/更新
另请注意,让一个线程等到另一个线程完全完成后,会删除线程可能带来的任何性能提升。