互斥锁与读写锁

1、互斥锁
    为了保护共享资源,使我们线程可以单独使用某个共享资源,使用之前先上锁,当其他进程要使用的时候,就需要等待到这个线程用完之后,再开锁。

  

    声明这个互斥锁:
            pthread_mutex_t  m; 
    初始化这个互斥锁: 
            int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr);
            第一个参数:就是我们前面声明的锁,因为这个参数需要传递的是一个锁的指针,所以需要有一个取地址符。
            第二个参数:是这个锁的属性,我们让它是默认的属性,这里设置为NULL

             返回值:成功返回0, 失败返回-1

    上锁:锁住某个资源
            int pthread_mutex_lock(pthread_mutex_t *mutex);        这个函数是阻塞型,参数传递的是这个锁的指针。
            int pthread_mutex_trylock(pthread_mutex_t *mutex);    这个是非阻塞型的,参数传递的是这个锁的指针。
        返回值:成功返回0,失败返回-1
            

    解锁:
            int pthread_mutex_unlock(pthread_mutex_t *mutex);    这个是解锁的函数,参数传递的是这个锁的指针。
        返回值:成功返回0,失败返回-1
  

    销毁这个互斥锁:
            int pthread_mutex_destroy(pthread_mutex_t *mutex);
            第一个参数:传递的是这个锁的指针。

             返回值:成功返回0,  失败返回-1
          

2、读写锁
    为了保护共享资源的访问,这里区分了读的访问和写的访问。
    
    先声明:pthread_rwlock_t rwlock;
    初始化:int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock, const pthread_rwlockattr_t *restrict attr);
        第一个参数:就是我们前面声明的锁,因为这个参数需要传递的是一个锁的指针,所以需要有一个取地址符。
        第二个参数:是这个锁的属性,我们让它是默认的属性,这里设置为NULL            

        返回值:成功返回0,失败返回-1
            
    上锁:
        int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);        上的是读锁
        int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);        上的是读锁,非阻塞型的
        int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock);        上的是写锁,非阻塞型的
        int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);        上的是写锁,阻塞型的,如果上了这个写锁,它的作用和互斥锁是一样。

    解锁:
        pthread_rwlock_unlock();


    销毁:    int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);
                            第一个参数:传递的是这个锁的指针

                           返回值:成功返回0,  失败返回-1
          

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值