在C语言中同步变量
我有一个递归函数,它按照特定的规则遍历矩阵的元素。每次我通过一个元素,我都会根据当时我在矩阵中的元素计算结果,当函数的所有调用结束时,我回到我开始的第一个元素,我就得到了我在前面提到的结果中需要的结果 现在的问题是,我必须用这个结果替换矩阵中的每个元素。根据我的想法,我有3种选择:在C语言中同步变量,c,multithreading,synchronization,C,Multithreading,Synchronization,我有一个递归函数,它按照特定的规则遍历矩阵的元素。每次我通过一个元素,我都会根据当时我在矩阵中的元素计算结果,当函数的所有调用结束时,我回到我开始的第一个元素,我就得到了我在前面提到的结果中需要的结果 现在的问题是,我必须用这个结果替换矩阵中的每个元素。根据我的想法,我有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”,就好像你是计算机,执行程序指令一样。对于初学者来说,这是理解单线程程序的一种很常见的方法,但当您开始思考多线程程序时,这可能没有多大帮助。当计算机执行一个多线程程序时,它更像是你和你的几个朋友在同一块白板上,彼此独立地同时执行程序指令。当我们说“同步”时,我们谈论的是防止你们把彼此的工作搞砸的规则。