生产者与消费者问题 之锁的顺序
1: /* 生产者方法 */
2: void *product(){
3: sem_wait(&empty_sem);
4: pthread_mutex_lock(&mutex);
5: /*生产*/
6: pthread_mutex_unlock(&mutex);
7: sem_post(&full_sem);
8: }
9: /* 消费者方法 */
10: void *consumer(){
11: sem_wait(&full_sem);
12: pthread_mutex_lock(&mutex);
13: /*消费*/
14: pthread_mutex_unlock(&mutex);
15: sem_post(&empty_sem);
16: }
sem_wait()和pthread_mutext_lock是不能交换位置的;
pthread_mutex_unlock()和sem_post()是可以交换位置的,那么
我个人觉得sem_post在pthread_mutext_unlock前,系统开销小点。