互斥锁

互斥锁

线程同步能够保证多个线程安全访问竞争资源,最简单的同步机制是引入互斥锁。互斥锁为资源引入一个状态:锁定/非锁定。某个线程要更改共享数据时,先将其锁定,此时资源的状态为“锁定”,其他线程不能更改;直到该线程释放资源,将资源的状态变成“非锁定”,其他的线程才能再次锁定该资源。互斥锁保证了每次只有一个线程进行写入操作,从而保证了多线程情况下数据的正确性

1、互斥锁基本原理:
互斥锁是一个二元变量,其状态为开锁(允许0)和上锁(禁止1),将某个共享资源与某个特定互斥锁在逻辑上绑定(要申请该资源必须先获取锁)。
(1)访问公共资源前,必须申请该互斥锁,若处于开锁状态,则申请到锁对象,并立即占有该锁,以防止其他线程访问该资源;如果该互斥锁处于锁定状态,则阻塞当前线程。
(2)只有锁定该互斥锁的进程才能释放该互斥锁,其他线程试图释放无效。

2、初始化互斥锁:
使用之前,需要定义互斥锁,使用函数:pthread_mutex_t lock;进行定义

extern int    pthread_mutex_init(pthread_mutex_t * **_mutex**,_const pthread_mutex_mutexattr_t*  **_mutexattr**)

参数: _mutex 初始化的互斥锁的指针
_mutexattr 指向对象的指针,若为空则默认属性

3、申请互斥锁
如果一个线程要占用共享资源,必须先申请对应互斥锁,使用函数:
以阻塞方式申请互斥锁:

extern int pthread_mutex_lock(pthread_mutex* _mutex)

以非阻塞方式申请互斥锁:

extern int pthread_mutex_trylock(pthread_mutex* _mutex

4、释放互斥锁
释放互斥锁函数:

extern int pthread_mutex_unlock(pthread_mutex_t* _mutex)

死锁

死锁是指一个资源被多次调用,而多次调用方都未能释放该资源就会造成一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁

死锁产生:
一个线程内部多次加锁缺没有释放引起死锁
多个线程内部多次调用引起死锁
python中的实例

你可能感兴趣的:(C/C++,Python,互斥锁)