Linux怎么向全局变量添加互斥锁

   2025-02-13 6770
核心提示:要向全局变量添加互斥锁,可以使用Linux系统提供的pthread库中的互斥锁。以下是一个示例代码:#include stdio.h#include stdlib.

要向全局变量添加互斥锁,可以使用Linux系统提供的pthread库中的互斥锁。以下是一个示例代码:

#include <stdio.h>#include <stdlib.h>#include <pthread.h>int global_var = 0;pthread_mutex_t mutex;void* thread_function(void* arg) {    // 加锁    pthread_mutex_lock(&mutex);    // 修改全局变量    global_var++;    // 解锁    pthread_mutex_unlock(&mutex);    return NULL;}int main() {    pthread_t thread1, thread2;    // 初始化互斥锁    pthread_mutex_init(&mutex, NULL);    // 创建线程    pthread_create(&thread1, NULL, thread_function, NULL);    pthread_create(&thread2, NULL, thread_function, NULL);    // 等待线程结束    pthread_join(thread1, NULL);    pthread_join(thread2, NULL);    // 打印最终结果    printf("global_var = %d\n", global_var);    // 销毁互斥锁    pthread_mutex_destroy(&mutex);    return 0;}

在上述代码中,我们使用了pthread库中的pthread_mutex_t数据类型来定义一个互斥锁变量mutex。在各个线程中修改全局变量global_var之前,先使用pthread_mutex_lock函数来加锁,然后修改完全局变量后使用pthread_mutex_unlock函数来解锁。这样可以保证在同一时间只有一个线程可以修改全局变量,避免了竞争条件的发生。最后,通过pthread_mutex_init和pthread_mutex_destroy来初始化和销毁互斥锁。

需要注意的是,不要忘记在每个线程中使用pthread_mutex_lock和pthread_mutex_unlock成对出现,否则可能导致死锁或其他问题。

 
 
更多>同类维修知识
推荐图文
推荐维修知识
点击排行
网站首页  |  关于我们  |  联系方式  |  用户协议  |  隐私政策  |  网站留言