首页 » 嵌入式笔记 » 正文

linux互斥锁,信号量

互斥锁与信号量的区别

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

发表评论