什么是互斥锁

1.基本概念

互斥:控制2个进程使之相互排斥,不同时运行

同步:控制2个进程使之有先有后,次序可控

2.互斥锁

2.1基本概念

对共享数据进行锁定,同一时刻只有一个线程进行操作

这就相当于一个就当的房间,一个房间只能入住一人,当一人入住之后就上锁,若下一个人想入住,只有等前一人解锁之后才能入住

2.2函数接口

操作:初始化、加锁、解锁、销毁

定义

pthread_mutex_t m;

由于互斥锁被多条线程使用,因此将互斥锁定义为全局变量

初始化

未经初始化的互斥锁是无法被使用的。

初始化互斥锁的方法:

  1. 静态初始化
  2. 动态初始化

静态初始化

pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;

动态初始化

int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr);

参数:

  • mutex:互斥锁名称
  • attr:互斥锁属性

加锁和解锁

// 加锁
pthread_mutex_lock( &m );

// 解锁
pthread_mutex_unlock( &m );

销毁

int pthread_mutex_destroy(pthread_mutex_t *mutex);

实例代码

#include <stdio.h>
#include <unistd.h>
#include <pthread.h> //线程头文件

//定义锁
pthread_mutex_t m;
char global = 'X';

void *routine(void *arg)
{
    pthread_mutex_lock(&m);//加锁
    int i = 1000;
    while(i>0)
    {
        i--;
        fprintf(stderr,"[%c:%c]",*(char *)arg,global);
    }
    pthread_mutex_unlock(&m);

    pthread_exit(NULL);
}

int main(void)
{
//初始化锁
    pthread_mutex_init(&m,NULL);
    pthread_t t1,t2,t3;

    pthread_create(&t1,NULL,routine,"1");
    pthread_create(&t2,NULL,routine,"2");
    pthread_create(&t3,NULL,routine,"3");

    pthread_join(t1,NULL);
    pthread_join(t2,NULL);
       pthread_join(t3,NULL);
    //销毁锁
    pthread_mutex_destroy(&m);

    pthread_exit(NULL);
}

结果图:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想敲代码的羊羊羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值