intMemorizedCutRodAux(constint *rodLen2Price, int curRodLen, int *optimalRodTotalMoney){ cout << "调用MemorizedCutRodAux"<< endl; if (optimalRodTotalMoney[curRodLen] >= 0) { return optimalRodTotalMoney[curRodLen]; }
int q = -1; if (curRodLen == 0) { q = 0; } else { for (int i = 1; i <=curRodLen ; ++i) { int tmp = rodLen2Price[i] + MemorizedCutRodAux(rodLen2Price, curRodLen-i, optimalRodTotalMoney); q = (q < tmp ? tmp : q); } }
optimalRodTotalMoney[curRodLen] = q; return q; }
intMemorizedCutRod(constint *rodLen2Price, int curRodLen){ int * optimalRodTotalMoney = newint[curRodLen + 1]; for (int i = 0; i <= curRodLen; ++i) { optimalRodTotalMoney[i] = -1; }
Linux 中最简单的同步方法就是原子操作。原子 意味着临界段被包含在 API 函数中。不需要额外的锁定,因为 API 函数已经包含了锁定。由于 C 不能实现原子操作,因此 Linux 依靠底层架构来提供这项功能。各种底层架构存在很大差异,因此原子函数的实现方法也各不相同。一些方法完全通过汇编语言来实现,而另一些方法依靠 c 语言并且使用 local_irq_save 和 local_irq_restore 禁用中断。 当需要保护的数据非常简单时,例如一个计数器,原子运算符是种理想的方法。尽管原理简单,原子 API 提供了许多针对不同情形的运算符。