在线程实际运行过程中,我们经常需要多个线程保持同步。这时可以用互斥锁来完成任务。
互斥锁的使用过程中,主要有pthread_mutex_init,pthread_mutex_destory,pthread_mutex_lock,pthread_mutex_unlock这几个函数以完成锁的初始化,锁的销毁,上锁和释放锁操作。
一,锁的创建
锁可以被静态或者动态的创建:
如下可以完成静态的初始化锁:
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
另外锁可以用pthread_mutex_init函数动态的创建,函数原型如下:
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t * attr)
二, 锁的释放:
调用pthread_mutex_destory之后,可以释放锁占用的资源,但前提是:锁当前是没有被锁的状态。
三,锁的lock/unlock 操作:
int pthread_mutex_lock(pthread_mutex_t *mutex)
int pthread_mutex_unlock(pthread_mutex_t *mutex)
int pthread_mutex_trylock(pthread_mutex_t *mutex)
pthread_mutex_trylock()语义与pthread_mutex_lock()类似,不同的是在锁已经被占据时返回EBUSY而不是挂起等待
四,锁的使用
程序将会一个线程一个线程的执行, 而不是乱序执行。