C语言多线程互斥锁

本文通过一个具体的C代码示例,详细解析了互斥锁在多线程编程中的作用,展示了如何使用互斥锁防止多个线程同时访问临界资源,避免数据竞争和不一致的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

互斥锁是为了防止多个线程同时操作临界资源,下面看看用法:

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

pthread_mutex_t mute;
int value = 0;
void *fun(void *arg){
    //上锁,函数是阻塞的
    pthread_mutex_lock(&mute);
    printf("now is %d and old value is %d \n",*((int *)arg), value);
    ++value;
    printf("now is %d and new value is %d \n",*((int *)arg), value);
    //解锁
    pthread_mutex_unlock(&mute);
}
int main(){

    pthread_t threads[5];
    int thread_id[5];
    //创建锁,相当于new一个对象
    pthread_mutex_init(&mute, NULL);
    for(int i=0; i<5; ++i){
        thread_id[i] = i;
        pthread_create(&threads[i], NULL, fun, (void *)&thread_id[i]);
    }
    for(int i=0; i<5; ++i)
        int rc = pthread_join(threads[i], NULL);
    //释放互斥锁
    pthread_mutex_destroy(&mute);
    return 0;
}

运行结果:

可以看出线程的运行顺序是不确定的,一个线程对资源上锁了,其他线程想上锁只能被阻塞。加入去掉互斥锁的结果如下:

可以看出同一个线程内操作value的前后值是异常的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值