I am doing it wrong, yes?
...
if( you_think_youre_genius )
goto goto_sucks:
...
pthread_mutex_lock(&mutex);
do_stuff();
goto_sucks:
do_other_stuff();
pthread_mutex_unlock(&mutex);
Yes, goto is direct jmp down at the binary code level so any function calls between the goto and the label will be skipped, period.
The mutex is acquired inside the pthread_mutex_lock
function. If you jump past the function call, you will not have acquired the mutex. If you try to lock a mutex twice, you may deadlock. If you try to unlock a mutex you do not own, you may break things very badly.
If the condition is true, do_other_stuff
will be called without the mutex being locked, and then the mutex will be released without locking it. Plain wrong!
Just without goto
if( you_think_youre_genius )
{
pthread_mutex_lock(&mutex);
}
else
{
...
pthread_mutex_lock(&mutex);
//Assumming no expetion thrown
do_stuff();
}
do_other_stuff();
pthread_mutex_unlock(&mutex);
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