互斥锁与读写锁

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
          

你可能感兴趣的:(互斥锁与读写锁)