我必须使用两个线程;一是对矩阵进行各种运算,二是监控矩阵运算过程中各个点的虚拟内存。此方法需要使用全局状态变量“标志”。
到目前为止,我有以下内容(为简洁起见,省略了一些):
int flag = 0;
int allocate_matrices(int dimension)
{
while (flag == 0) {} //busy wait while main prints memory state
int *matrix = (int *) malloc(sizeof(int)*dimension*dimension);
int *matrix2 = (int *) malloc(sizeof(int)*dimension*dimension);
flag = 0;
while (flag == 0) {} //busy wait while main prints memory state
// more similar actions...
}
int memory_stats()
{
while (flag == 0)
{ system("top"); flag = 1; }
}
int main()
{ //threads are created and joined for these two functions }
如您所料,system("top")
调用发生一次,矩阵被分配,然后程序陷入无限循环。在我看来,这是因为分配给memory_stats
函数的线程已经完成了它的职责,所以标志将永远不会再次更新。
有没有一种优雅的方式来解决这个问题?我知道我必须打印四次内存统计信息,所以我突然想到我可以在memory_stats
函数中编写四个 while 循环,忙于等待它们之间的全局标志,但这对我来说似乎很笨拙。任何帮助或指示将不胜感激。