son*_*phi 5 c c++ multithreading
我目前正在使用以下代码进行变量的线程安全访问.
int gnVariable;
void getVariableValue(int *pnValue)
{
acquireLock(); //Acquires the protection mechanism
*pnValue = gnVariable;
releaseLock(); //Releasing the protection mechanism
}
Run Code Online (Sandbox Code Playgroud)
我想将我的API签名更改为更加用户友好
int getVariableValue(void);
Run Code Online (Sandbox Code Playgroud)
我应该如何重写函数 - 这样API的用户不必担心锁定/解锁细节?
既然你给了C++作为选项,你可以包装互斥锁/解锁.然后,您可以直接返回值:
class lock_wrapper
{
public:
lock_wrapper()
{
acquireLock();
}
~lock_wrapper()
{
releaseLock();
}
};
int getVariableValue()
{
lock_wrapper lw;
return gnVariable;
}
Run Code Online (Sandbox Code Playgroud)
如果您需要对可能引发异常的代码执行锁定/解锁,这也会派上用场.
您返回局部变量的副本.就像是:
int getVariableValue(void)
{
int local= 0;
acquireLock();
local = gnVariable;
releaseLock();
return local;
}
Run Code Online (Sandbox Code Playgroud)
作为旁注,对于锁定代替和方法,RAII原则更好.acquireLockreleaseLock
| 归档时间: |
|
| 查看次数: |
1232 次 |
| 最近记录: |