C - pthread函数重用 - 局部变量和竞争条件

发布于 2024-11-25 08:48:57 字数 832 浏览 2 评论 0原文

如果我定义一个线程函数来重用主线程也使用的另一个函数......是否可能存在竞争条件?同一函数中的局部变量是否跨线程共享?在这种情况下,函数 do_work 在 thread_one 线程和主线程中都使用。函数 do_work 中的局部变量 x 是否可以被两个线程修改,从而产生意外结果?

void *thread_one() {
   int x = 0;
   int result;
   while(1) {
       for(x=0; x<10; x++) {
           result = do_work(x);
       }
       printf("THREAD: result: %i\n", result);
   }
}

int do_work(int x) {
    x = x + 5;
    return x;
}

int main(int argc, char**argv) {
    pthread_t the_thread;
    if( (rc1 = pthread_create( &the_thread, NULL, thread_one, NULL)) ) {
        printf("failed to create thread %i\n", rc1);
        exit(1);
    }
    int i = 0;
    int result = 0;
    while(1) {
        for(i=0; i<12; i+=2) {
            result = do_work(i);
        }
        printf("MAIN: result %i\n", result);
    }
    return 0;
}    

If I define a thread function that reuses another function that the main thread also uses....is it possible that there can be a race condition? Are the local variables in the same function shared across threads? In this case the function do_work is used in both the thread_one thread and the main thread. Can the local variable x in the function do_work be modified by both threads so it creates an unexpected result?

void *thread_one() {
   int x = 0;
   int result;
   while(1) {
       for(x=0; x<10; x++) {
           result = do_work(x);
       }
       printf("THREAD: result: %i\n", result);
   }
}

int do_work(int x) {
    x = x + 5;
    return x;
}

int main(int argc, char**argv) {
    pthread_t the_thread;
    if( (rc1 = pthread_create( &the_thread, NULL, thread_one, NULL)) ) {
        printf("failed to create thread %i\n", rc1);
        exit(1);
    }
    int i = 0;
    int result = 0;
    while(1) {
        for(i=0; i<12; i+=2) {
            result = do_work(i);
        }
        printf("MAIN: result %i\n", result);
    }
    return 0;
}    

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

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

发布评论

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

评论(4

桃扇骨 2024-12-02 08:48:57

。局部变量不在线程之间共享。

No. Local variables aren't shared across threads.

浪荡不羁 2024-12-02 08:48:57

不,线程的局部变量不在线程之间共享。

具体来说,每个线程都有自己的一组寄存器和堆栈。然而,代码和全局数据是共享的。

No, local variables of thread are not shared accross threads.

In detail, each thread has its own set of registers and stack. However, code and global data are shared.

泡沫很甜 2024-12-02 08:48:57

否,因为 x 是局部变量。每个线程都使用自己的 x 变量,因此线程不可能修改其他线程的 x

No since x is a local variable. Every thread works with his own x variable, so there's no possibility for a thread to modify other thread's x.

两仪 2024-12-02 08:48:57

不,更重要的一点是,即使在同一线程中,局部(自动)变量也不会在函数的多个实例之间共享。这就是递归的工作原理以及函数可重入的原因。

No, and the more important point is that local (automatic) variables are not shared between multiple instances of a function even in the same thread. This is how recursion works and what makes it possible for functions to be reentrant.

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