如何在同一数组中的随机位置上执行多线程操作?

巴列斯特罗夫斯基

我有一个进程在随机位置上运行许多任务,Array并且想通过使用多线程来加快速度。

它的主要作用是将“数组”中的位置随机化,检查其周围环境的值,并在满足一些特定条件的情况下更改随机位置值。

是否可以运行类似

Parallel.For(0, n, s => { });

循环而不是下面显示的while代码块来优化此功能,那么执行此操作的代码块将如何?

我一直在考虑为选定的元素使用一些“忙”属性,但这实际上使问题变得更复杂,可能需要解决。

public void doStuffTothisArray(ref int[,,] Array, ref IGenerator randomGenerator, int loops)
{
    int cc = 0;
    int sw = 0;
    do
    {
        if (doStuffOnRandomPositions(ref Array, ref randomGenerator))
            sw++; //if stuff was made counter

        if ((cc % (loops / 10)) == 0)
            Console.Write("{0} % \t", (cc / (loops / 10)) * 10); //some loading info

        cc++; //count iterations
    } while (cc < loops);
    Console.WriteLine("Stuff altered in {0} iterations: {1}", loops, sw);
}

发表编辑:

划分数组并分配工作会破坏数组的动态,因为它需要是一个完整的系统。

这是文件的原型..()

public static bool doStuffOnRandomPositions(ref lattice A, ref IGenerator rr)
{
    position firstPos = new position(rr.Next(0, A.n_size),rr.Next(0, A.n_size),rr.Next(0, A.n_size));
    position secondPos = randomNeighbour(ref A, firstPos, ref rr);

    //checks the closest 3d neighbours indexer the lattice
    //Console.WriteLine("first:[{0},{1},{2}]\nsecond:[{3},{4},{5}]\n", firstPos.x, firstPos.y, firstPos.z, secondPos.x, secondPos.y, secondPos.z);

    //  get values at coordinates
    bool first = A.latticeArray[firstPos.x, firstPos.y, firstPos.z];
    bool second = A.latticeArray[secondPos.x,secondPos.y,secondPos.z];

    if (first == second) //don't bother if they are equal states
        return false;

    //  checks the energies in surroundings for an eventual spin switch
    int surrBefore = surroundCheck(ref A, firstPos, first) ; // - surroundCheck(ref A, secondPos, second));
    int surrAfter = surroundCheck(ref A, firstPos, !first) ; // - surroundCheck(ref A, secondPos, !second));

    if (surrAfter < surrBefore) //switch spin states if lower total energy
    {
        A.latticeArray[firstPos.x, firstPos.y, firstPos.z] = !first;
        A.latticeArray[secondPos.x, secondPos.y, secondPos.z] = !second;
        return true;
    }
    else if ((surrAfter == surrBefore) & latticeDistribution(ref rr))   //TEMPORARY
    {
        A.latticeArray[firstPos.x, firstPos.y, firstPos.z] = !first;        //TEMPORARY
        A.latticeArray[secondPos.x, secondPos.y, secondPos.z] = !second;    //TEMPORARY
        return true;
    }
    else
        return false;
} //FIX SWITCH PROBABILITIES

在这种情况下,应将晶格类别表示为包含其属性的“数组”。由于我对c#方法的不熟练,示例解决方案代码将非常感谢。

阿列克谢·列文科夫(Alexei Levenkov)

如果您将操作范围限定为元素的不相交范围(例如1-10、25-40、100-123),则可以对单个元素进行并行操作,而不必在单独的范围上并行运行。如果在进行操作时不重新分配数组,则不需要任何其他同步。

如果您更改随机元素的操作,则必须进行适当的同步,并且可能无法获得在多个线程上运行代码的任何好处。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何为数组中的随机位置赋值?

来自分类Dev

在Netlogo中的同一路径上为乌龟分配随机位置而没有乌龟?

来自分类Dev

如何在iOS中执行多线程?

来自分类Dev

Java:如何在同一数组中一一求和

来自分类Dev

如何在共享相同未知密钥的同一数组中合并多个对象?

来自分类Dev

如何在 JSX 中循环不属于同一数组的值

来自分类Dev

如何在窗格上的随机位置放置形状?

来自分类Dev

如何从2D数组中选择一个随机位置?

来自分类Dev

如何在多线程方案中对仅执行一次的代码进行单元测试?

来自分类Dev

如何用随机位置填充数组

来自分类Dev

如何在 Unity[c#] 中每次启动游戏时在随机位置显示精灵?

来自分类Dev

在C#中的随机位置上绘制形状

来自分类Dev

从JS中的同一数组中获取两个不同的随机项

来自分类Dev

从JS中的同一数组中获取两个不同的随机项

来自分类Dev

如何在随机位置递归创建 1 gb 文件

来自分类Dev

数组中的多线程写操作

来自分类Dev

数组中的多线程写操作

来自分类Dev

如何在javascripts或jquery中获取数组上的唯一数据?

来自分类Dev

如何在多线程C ++中传递多维数组

来自分类Dev

如何在React JS中的同一数组中添加两个或多个响应数据

来自分类Dev

MongoDB:如何在随机位置而不是最后和第一个位置聚合$ arrayElemAt?

来自分类Dev

如何在Play Framework 2.2的单独线程中使用同一数据库事务

来自分类Dev

如何在Play Framework 2.2的单独线程中使用同一数据库事务

来自分类Dev

如何在MySQL查询的同一张表上同时执行插入和选择操作?

来自分类Dev

开玩笑:测试数组的随机位置

来自分类Dev

如何在PHP中获得唯一数组

来自分类Dev

如何在bash中遍历jq唯一数组?

来自分类Dev

iOS - 如何在多线程中正确执行 sqlite3 写操作?

来自分类Dev

(Java多线程)如何在多线程中传递参数?

Related 相关文章

  1. 1

    如何为数组中的随机位置赋值?

  2. 2

    在Netlogo中的同一路径上为乌龟分配随机位置而没有乌龟?

  3. 3

    如何在iOS中执行多线程?

  4. 4

    Java:如何在同一数组中一一求和

  5. 5

    如何在共享相同未知密钥的同一数组中合并多个对象?

  6. 6

    如何在 JSX 中循环不属于同一数组的值

  7. 7

    如何在窗格上的随机位置放置形状?

  8. 8

    如何从2D数组中选择一个随机位置?

  9. 9

    如何在多线程方案中对仅执行一次的代码进行单元测试?

  10. 10

    如何用随机位置填充数组

  11. 11

    如何在 Unity[c#] 中每次启动游戏时在随机位置显示精灵?

  12. 12

    在C#中的随机位置上绘制形状

  13. 13

    从JS中的同一数组中获取两个不同的随机项

  14. 14

    从JS中的同一数组中获取两个不同的随机项

  15. 15

    如何在随机位置递归创建 1 gb 文件

  16. 16

    数组中的多线程写操作

  17. 17

    数组中的多线程写操作

  18. 18

    如何在javascripts或jquery中获取数组上的唯一数据?

  19. 19

    如何在多线程C ++中传递多维数组

  20. 20

    如何在React JS中的同一数组中添加两个或多个响应数据

  21. 21

    MongoDB:如何在随机位置而不是最后和第一个位置聚合$ arrayElemAt?

  22. 22

    如何在Play Framework 2.2的单独线程中使用同一数据库事务

  23. 23

    如何在Play Framework 2.2的单独线程中使用同一数据库事务

  24. 24

    如何在MySQL查询的同一张表上同时执行插入和选择操作?

  25. 25

    开玩笑:测试数组的随机位置

  26. 26

    如何在PHP中获得唯一数组

  27. 27

    如何在bash中遍历jq唯一数组?

  28. 28

    iOS - 如何在多线程中正确执行 sqlite3 写操作?

  29. 29

    (Java多线程)如何在多线程中传递参数?

热门标签

归档