I'm currently using the following code for thread-safe access of a variable.
int gnVariable;
void getVariableValue(int *pnValue)
{
acquireLock(); //Acquires the protection mechanism
*pnValue = gnVariable;
releaseLock(); //Releasing the protection mechanism
}
I would like to change my API signature to a more user-friendly
int getVariableValue(void);
How should I rewrite the function - such that the users of the API don't have to bother about the locking/unlocking details?
Since you gave C++ as an option, you can wrap the mutex lock/unlock. You can then return the value directly:
class lock_wrapper
{
public:
lock_wrapper()
{
acquireLock();
}
~lock_wrapper()
{
releaseLock();
}
};
int getVariableValue()
{
lock_wrapper lw;
return gnVariable;
}
This will also come in handy if you ever need to do a lock/unlock around code that can throw an exception.
You return a copy of the local variable. Something like:
int getVariableValue(void)
{
int local= 0;
acquireLock();
local = gnVariable;
releaseLock();
return local;
}
As a side note, it is better to RAII principle for locking instead of acquireLock
and releaseLock
methods.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With