互斥锁/读写锁的概念及使用、死锁的避免

互斥锁的概念和使用

  • 线程通信-互斥
    临界资源:一次只允许一个任务(进程、线程)访问的共享资源
    临界区:访问临界资源的代码
    互斥机制:mutex互斥锁,任务访问临界资源前申请锁,访问完后释放锁
  • 互斥锁初始化
    两种方法创建互斥锁,静态方式和动态方式
    动态方式:
    int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr);
    其中mutexattr用于指定互斥锁属性,如果为NULL则使用缺省属性。
    静态方式:
    pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
  • 锁的销毁:
    int pthread_mutex_destroy(pthread_mutex_t *mutex)
    在Linux中,互斥锁并不占用任何资源,因此LinuxThreads中的 pthread_mutex_destroy()除了检查锁状态以外(锁定状态则返回EBUSY)没有其他动作。
  • 互斥锁的使用
    int pthread_mutex_lock(pthread_mutex_t *mutex)//mutex 指的是互斥锁对象
    int pthread_mutex_unlock(pthread_mutex_t *mutex)
    int pthread_mutex_trylock(pthread_mutex_t *mutex)
    注:
    pthread_mutex_lock 如果无法获取锁,任务阻塞,pthread_mutex_trylock如果无法获取锁,返回EBUSY而不是挂起等待
    vim 设置代码全文格式化:gg=G
  • 代码如下:
    互斥锁/读写锁的概念及使用、死锁的避免_第1张图片
    互斥锁/读写锁的概念及使用、死锁的避免_第2张图片
  • 执行如下:
    互斥锁/读写锁的概念及使用、死锁的避免_第3张图片
    注:可以发现文件里的字符很乱,因为线程之间没有锁,都在一起执行,就会处乱,所以需要加入互斥锁的概念

你可能感兴趣的:(linux,运维,服务器)