互斥:多线程环境下,当所有线程同时访问共享数据时,可能产生冲突,需要使在任一时刻有且只有一个线程访问其共享数据,保证其原子性。
线程中实现互斥可运用互斥锁(mutex)来实现,其可相当于进程之间的二元信号量:
函数如下:
#include <pthread.h>
//定义初始化一把互斥锁
pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER; //全局、静态用宏初始化
int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr); //运用函数进行初始化
参数:
mutex:传入定义锁地址;
attr:互斥锁属性,一般设为NULL(默认属性).
int pthread_mutex_destroy(pthread_mutex_t* mutex); //销毁mutex锁
int pthread_mutex_lock(pthread_mutex_t* mutex); //加锁
int pthread_mutex_unlock(pthread_mutex_t* mutex); //解锁
int pthread_mutex_trylock(pthread_mutex_t* mutex); //尝试去加锁
返回值:成功返回0,失败返回错误号。
注意:一个线程可以调用pthread_mutex_lock获得Mutex,如果这时另一个线程已经调用pthr

本文探讨了线程同步与互斥的重要性,特别是在多线程环境中防止数据冲突。通过示例说明了互斥锁如何保证原子性,并解释了线程饥饿和同步的概念。还提到了条件变量在实现同步机制中的作用,如在消费者生产者模型中的应用。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



