互斥锁与信号量的区别
作用域
信号量: 进程间或线程间(linux仅线程间)
互斥锁: 线程间上锁时
信号量: 与ucos的一样,只要信号量的value大于0,其他线程就可以sem_wait成功,成功后信号量的value减一.若value值不大于0,则sem_wait阻塞,直到sem_post释放后value值加一
互斥锁: 只要被锁住,其他任何线程都不可以访问被保护的资源
一:互斥锁使用方式
pthread_mutex_t mutex; // 全局变量
pthread_mutex_init(&mutex, NULL); // 初始化互斥锁
pthread_mutex_lock(&mutex); // 加锁,阻塞
//.....互斥资源操作
pthread_mutex_unlock(&mutex); // 解锁.
//可以尝试非阻塞方式加锁,如果被占用返回EBUSY
//int pthread_mutex_trylock (pthread_mutex_t *__mutex);
二:信号量使用方式
sem_t sem;
sem_init(&sem, 0, 0); // 初始化信号量
// 线程A
sem_post(&sem);
// 线程B
sem_wait(&sem);
// or
sem_trywait(&sem); //失败返回 -1
正文完