我在C和C中有一个情况,可以用像
Python这样的装饰器来解决这个问题:我几乎没有一些我想要的东西包装的功能,所以在函数进入一些语句之前当它留下一些其他功能被执行.
例如,我在库C文件中有几个函数,当被调用时应该锁定信号量,并且在将控件返回到被调用者之前,应该释放信号量.没有锁,他们有以下结构:
int f1(int) { ... ... } int f2(char*) { .... } int f3(blabla) { .... } ... fn(...)
我想定义一个全局信号量,应该在函数返回之前调用和释放这些函数之前锁定.我想尽可能简单的做到这一点;接近这样的事情
#lockprotected int f1(int) { ... /* nothing changed over here */ } #endlockprotected
或类似的东西
int f1(int) { ... /* nothing changed over here */ } #lockprotected f1
我不想要的是:
>更改函数名称,因为它们是库函数,并且正在从许多地方调用.
>在返回调用之前明确地放置任何语句,因为大多数函数之间有很多早期的返回值.或者为了改变任何内部功能.
最优雅的方式是什么?