Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Concurrency X10并行处理共享变量_Concurrency_Parallel Processing_X10 Language - Fatal编程技术网

Concurrency X10并行处理共享变量

Concurrency X10并行处理共享变量,concurrency,parallel-processing,x10-language,Concurrency,Parallel Processing,X10 Language,如果我的问题不专业,请原谅。我正在阅读IBM x10的教程。下面是计算PI但让我困惑的代码: public static def countPoints(n: Int, rand: ()=>Double) { var inCircle: Double = 0.0; for (var j:Long = 1; j<=n; j++) { val x = rand(); val y = rand(); if (x*x +y*y <= 1.0) inCircl

如果我的问题不专业,请原谅。我正在阅读IBM x10的教程。下面是计算PI但让我困惑的代码:

public static def countPoints(n: Int, rand: ()=>Double) {
 var inCircle: Double = 0.0;
 for (var j:Long = 1; j<=n; j++) {
    val x = rand();
    val y = rand();
    if (x*x +y*y <= 1.0) inCircle++;
 }
    return inCircle;
}

val N = args.size() > 0 ? Long.parse(args(0)) : 100000;
 val THREADS = args.size() > 1 ? Int.parse(args(1)) : 4;
 val nPerThread = N/THREADS;
 val inCircle = new Array[Long](1..THREADS);
 finish for(var k: Int =1; k<=THREADS; k++) {
     val r = new Random(k*k + k + 1);
     val rand = () => r.nextDouble();
     val kk = k;
     async inCircle(kk) = countPoints(nPerThread,rand);
 }
 var totalInCircle: Long = 0;
 for(var k: Int =1; k<=THREADS; k++) {
     totalInCircle += inCircle(k);
}
val pi = (4.0*totalInCircle)/N;
publicstaticdef countPoints(n:Int,rand:()=>Double){
内圆变量:双=0.0;
对于(varj:Long=1;j1?Int.parse(args(1)):4;
val nPerThread=N个线程;
val inCircle=新数组[Long](1..THREADS);
完成(变量k:Int=1;kr.nextDouble();
val kk=k;
异步内循环(kk)=计数点(nPerThread,rand);
}
var totalInCircle:长=0;

对于(var k:Int=1;k很好,您在这里担心可能的竞争条件。在并行调用随机数生成器时,它经常被忽略

幸运的是,这个例子没有RNG竞态条件。for循环的每次迭代都会创建一个随机数生成器的新实例(并为其种子),并生成一个线程。因为
countPoints
调用它自己的RNG,所以这里没有竞态条件