互斥锁与信号量的区别
作用域
信号量: 进程间或线程间(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
发表回复