linux互斥锁,信号量

4,046次阅读
没有评论

互斥锁与信号量的区别

作用域
信号量: 进程间或线程间(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);
Default

二: 信号量使用方式

sem_t sem;
sem_init(&sem, 0, 0); // 初始化信号量
// 线程 A
sem_post(&sem);
// 线程 B
sem_wait(&sem);
// or
sem_trywait(&sem); // 失败返回 -1
Default
正文完
 0
评论(没有评论)