在C语言中同步变量

在C语言中同步变量,c,multithreading,synchronization,C,Multithreading,Synchronization,我有一个递归函数,它按照特定的规则遍历矩阵的元素。每次我通过一个元素,我都会根据当时我在矩阵中的元素计算结果,当函数的所有调用结束时,我回到我开始的第一个元素,我就得到了我在前面提到的结果中需要的结果 现在的问题是,我必须用这个结果替换矩阵中的每个元素。根据我的想法,我有3种选择: 使用相同的算法从起始元素再次调用函数并再次遍历,基本上是通过相同的路径并用结果替换元素(这将是最低效的,因为算法和矩阵的大小都非常大) 记住我在每个调用中到达矩阵中的元素的地址,然后我会有一个地址向量,在函数完成后,

我有一个递归函数,它按照特定的规则遍历矩阵的元素。每次我通过一个元素,我都会根据当时我在矩阵中的元素计算结果,当函数的所有调用结束时,我回到我开始的第一个元素,我就得到了我在前面提到的结果中需要的结果

现在的问题是,我必须用这个结果替换矩阵中的每个元素。根据我的想法,我有3种选择:

  • 使用相同的算法从起始元素再次调用函数并再次遍历,基本上是通过相同的路径并用结果替换元素(这将是最低效的,因为算法和矩阵的大小都非常大)

  • 记住我在每个调用中到达矩阵中的元素的地址,然后我会有一个地址向量,在函数完成后,我只是通过
    然后用我计算的向量替换这些值

  • 这对我来说是一个很长的实现过程,但是我想我可以用一个外部变量同步我在矩阵中到达的位置上的所有变量。当函数完成并得到结果时,我只需用结果更改此外部变量的值,矩阵中链接此变量的所有其他元素将自动更改


  • 我的问题是如何实现像“3”这样的东西?有没有什么方法可以使一个变量(或多个变量)与另一个不断更新的变量始终具有相同的值?

    根据矩阵的定义,例如:

    struct Matrix {
         int N, M;
         int *Mat;
    };
    Type Values[];
    
    其中,(i,j)处的值是值[G->Mat[G->M*i+j];也就是说,Mat只是将索引保存到可以动态扩展的值[]中。在路径遍历开始时,您可以分配一个新值[t],并将每个访问的节点(i,j)更改为t:G->Mat[G->M*i+j]=t。分配值[t]时,链接到它的所有节点都将自动更新

    在进行遍历时,将使用它们的值,然后在移动到下一个节点时更改它们的索引。偶然的是,如果您遇到一个索引为t的节点,您就会知道您陷入了一个循环


    尽管我可能严重误读了您的需求。

    C并不是天生为#3提供支持的。在C中实现#3本质上可能是#2(至少是一种合理的方法),即使可以实现#3,也必须将同步延迟到完成递归过程之后。在我所知道的任何语言中都没有这样的语言。#2可能是最好的方法。你说“我做X”和“我做Y”,就好像你是计算机,执行程序指令一样。对于初学者来说,这是理解单线程程序的一种很常见的方法,但当您开始思考多线程程序时,这可能没有多大帮助。当计算机执行一个多线程程序时,它更像是你和你的几个朋友在同一块白板上,彼此独立地同时执行程序指令。当我们说“同步”时,我们谈论的是防止你们把彼此的工作搞砸的规则。