会不会违反互斥锁?

pal*_*rom 7 c mutex goto

我做错了,是吗?

...
if( you_think_youre_genius )
    goto goto_sucks:
...
pthread_mutex_lock(&mutex);

    do_stuff();

    goto_sucks:
        do_other_stuff();

pthread_mutex_unlock(&mutex);
Run Code Online (Sandbox Code Playgroud)

And*_*ite 12

是的,goto是二进制代码级别的直接jmp,因此将跳过goto和标签之间的任何函数调用.


rli*_*bby 5

互斥锁是在pthread_mutex_lock函数内部获取的.如果跳过函数调用,则不会获得互斥锁.如果您尝试两次锁定互斥锁,则可能会死锁.如果你试图解锁你不拥有的互斥锁,你可能会非常糟糕.