问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

C语言实现多线程的上锁及解锁过程

创作时间:
作者:
@小白创作中心

C语言实现多线程的上锁及解锁过程

引用
CSDN
1.
https://blog.csdn.net/m0_55334488/article/details/141714185

在多线程编程中,确保线程安全地访问共享变量是一个重要的问题。本文将通过一个具体的C语言示例,介绍如何使用POSIX线程库(pthreads)中的互斥锁(mutex)来实现线程间的同步。

在C语言中,多线程编程通常使用POSIX线程库(pthreads),它提供了创建和管理线程的功能。为了保证线程安全地访问共享变量,可以使用互斥锁(mutex)。下面是一个简单的示例,展示了如何使用pthread库中的互斥锁来保护共享变量的访问。

C语言示例代码

#include <stdio.h>  
#include <stdlib.h>  
#include <pthread.h>  

// 共享变量  
int shared_counter = 0;  

// 创建一个互斥锁  
pthread_mutex_t lock;  

void* increment_counter(void *arg) {  
    int i;  
    for (i = 0; i < 100000; i++) {  
        // 获取锁  
        pthread_mutex_lock(&lock);  
        {  
            shared_counter++;  
        }  
        // 释放锁  
        pthread_mutex_unlock(&lock);  
    }  
    return NULL;  
}  

int main() {  
    // 初始化互斥锁  
    pthread_mutex_init(&lock, NULL);  

    // 创建线程  
    pthread_t thread1, thread2;  
    if (pthread_create(&thread1, NULL, increment_counter, NULL) != 0) {  
        perror("Failed to create thread1");  
        exit(EXIT_FAILURE);  
    }  
    if (pthread_create(&thread2, NULL, increment_counter, NULL) != 0) {  
        perror("Failed to create thread2");  
        exit(EXIT_FAILURE);  
    }  

    // 等待线程结束  
    pthread_join(thread1, NULL);  
    pthread_join(thread2, NULL);  

    // 输出结果  
    printf("Final value of shared_counter: %d\n", shared_counter);  

    // 销毁互斥锁  
    pthread_mutex_destroy(&lock);  

    return 0;  
}  

以上代码可以直接使用。下面是代码的详细说明:

  1. 定义共享变量shared_counter是一个全局变量,它将在两个线程之间共享。
  2. 初始化互斥锁:使用pthread_mutex_init函数初始化互斥锁lock
  3. 定义工作函数increment_counter函数用来增加shared_counter的值。
  4. 获取和释放锁:在修改shared_counter之前先使用pthread_mutex_lock获取锁,并在完成后使用pthread_mutex_unlock释放锁。这样可以保证每次只有一个线程能够修改shared_counter
  5. 创建和启动线程:使用pthread_create创建两个线程并启动它们。
  6. 等待线程结束:使用pthread_join等待所有线程完成。
  7. 输出结果:打印出最终的shared_counter值。
  8. 销毁互斥锁:使用pthread_mutex_destroy销毁互斥锁。

通过这个示例,我们可以看到互斥锁在多线程编程中的重要作用,它能够有效地避免多个线程同时访问共享资源时可能出现的竞态条件(race condition)问题。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号