我有一个M[nxn]
矩阵,必须计算[n, n]点上元素的和,考虑以下条件:
-随机选择一行或一列;
-对该行或列的最后一个元素求和,并将其他元素设置为0;
现在的问题是,我必须锁定我正在处理的每一行或每一列,因为我需要用不止一个过程来做这个求和。怎么解呢?
我知道我必须使用fcntl()
和其他一些属于它的东西,但我对解它的方法感兴趣。
(谢谢你的建议!)
实际上不需要锁定矩阵(除非它在文件中)。如果它在一个文件中,我会先把矩阵加载到内存中,然后你就不需要锁了。这样看:
如果您有一个nxm矩阵,让您的父进程派生m个子进程并等待子进程。
在每个子进程中,每个子进程取m行中的每一行。
让每个子进程将每行相加,并将值设置为0,并将总和放在最后一列。
结束每个子进程。
当所有操作完成后,让父进程对列的第n行求和。
由于所有的子进程都将对自己的数据集进行操作,因此它们不需要锁定矩阵的任何部分,因为我们不会访问相同的内存区域。