互斥锁与信号量的区别
作用域
信号量: 进程间或线程间(linux 仅线程间)
互斥锁: 线程间上锁时
信号量: 与 ucos 的一样, 只要信号量的 value 大于 0, 其他线程就可以 sem_wait 成功, 成功后信号量的 value 减一. 若 value 值不大于 0, 则 sem_wait 阻塞, 直到 sem_post 释放后 value 值加一
互斥锁: 只要被锁住, 其他任何线程都不可以访问被保护的资源
一: 互斥锁使用方式
二: 信号量使用方式
正文完
互斥锁与信号量的区别
作用域
信号量: 进程间或线程间(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 |