线程锁之——互斥锁

什么是互斥锁

        互斥锁是一种用于解决多线程访问共享资源时可能出现的线程安全问题的机制。多个线程需要对共享资源进行访问,而互斥锁可以确保在任意时刻只有一个线程能够访问该资源,从而避免了数据的不一致性和并发访问带来的问题。

        简单来说就是多个线程在操作同一片内存时,一个线程正在读这片内存的数据时,另一个线程又去修改了这片内存的数据。这样会造成数据不一致而导致出现严重问题。

使用互斥锁

  1. 初始化互斥锁:通过pthread_mutex_init函数初始化互斥锁。有静态分配和动态分配两种方式。静态分配:pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;     动态分配:pthread_mutex_t mutex; pthread_mutex_init(&mutex, NULL);
  2. 使用互斥锁:在需要保护的代码段前,调用pthread_mutex_lock函数上锁。确保处于临界区的线程不被其他线程打断,确保其临界区运行完整。
  3. 解锁互斥锁:在离开保护的代码段后,调用pthread_mutex_unlock函数解锁。
  4. 销毁互斥锁:在所有使用过此互斥锁的线程都不再需要使用时,应调用pthread_mutex_destroy函数销毁互斥锁。

        下面使用一段代码来验证互斥锁

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

pthread_mutex_t mutex;

void* myfunc_1(void *arg)
{
    pthread_mutex_lock(&mutex);

    printf("111111\n");
    sleep(1);
    printf("222222\n");
    sleep(1);
    pthread_mutex_unlock(&mutex);
}

void* myfunc_2(void *arg)
{
    pthread_mutex_lock(&mutex);

    printf("333333\n");
    sleep(1);
    printf("444444\n");
    sleep(1);

    pthread_mutex_unlock(&mutex);
}

int main()
{
    pthread_t tid1, tid2;

    pthread_mutex_init(&mutex,NULL);

    pthread_create(&tid1, NULL, myfunc_1, NULL);
    pthread_create(&tid2, NULL, myfunc_2, NULL);

    pthread_join(tid1, NULL);
    pthread_join(tid2, NULL);

    pthread_mutex_destroy(&mutex);

    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值