linux互斥锁,信号量

4,040次阅读
没有评论

互斥锁与信号量的区别

作用域
信号量: 进程间或线程间(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
正文完
 0
评论(没有评论)