goto 会违反互斥体吗?

发布于 2024-10-20 03:47:48 字数 226 浏览 0 评论 0原文

我做错了,是吗?

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

    do_stuff();

    goto_sucks:
        do_other_stuff();

pthread_mutex_unlock(&mutex);

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);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

℉服软 2024-10-27 03:47:48

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

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.

长途伴 2024-10-27 03:47:48

互斥体是在 pthread_mutex_lock 函数内部获取的。如果您跳过函数调用,您将不会获得互斥锁。如果您尝试两次锁定互斥锁,则可能会出现死锁。如果您尝试解锁不属于您的互斥体,则可能会严重破坏事情。

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.

北笙凉宸 2024-10-27 03:47:48

如果条件为真,则将在不锁定互斥锁的情况下调用do_other_stuff,然后释放互斥锁而不锁定它。 完全错误!

只是没有 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 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);   
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文