当前位置: 技术问答>linux和unix
线程时序,难题求救!
来源: 互联网 发布时间:2016-02-19
本文导语: 如果producer 和customer函数只要保证时序上pthread_cond_signal(notempty)在 pthread_cond_wait之前就可以了,为什么还要加锁 我觉得mutex在这种情况下不是必须的,但是根据pthread_cond_signal pthread_cond_wait来看有每个函数都有个mu...
如果producer 和customer函数只要保证时序上pthread_cond_signal(notempty)在
pthread_cond_wait之前就可以了,为什么还要加锁
我觉得mutex在这种情况下不是必须的,但是根据pthread_cond_signal pthread_cond_wait来看有每个函数都有个mutex参数(lock)的话,似乎一定要把mutex加进来,时序上先后保证了不就行了,为什么一定要加进来mutex。
void t1()
{
pthread_mutex_lock(lock);
pthread_cond_signal(notempty,lock);
pthread_mutex_unlock(lock);
}
void t2()
{
pthread_mutex_lock(lock);
pthread_cond_wait(notfull,lock) ;
pthread_mutex_unlock(lock);
}
int main(void){
pthread_t th_a,th_b;
void * retval;
Pthread_create(&th_a,NULL,t1,0);
Pthread_create(&th_b,NULL,t2,0);
/*等待两个线程结束*/
Pthread_join(th_a,&retval);
Pthread_join(th_b,&retval);
return 0;
}
pthread_cond_wait之前就可以了,为什么还要加锁
我觉得mutex在这种情况下不是必须的,但是根据pthread_cond_signal pthread_cond_wait来看有每个函数都有个mutex参数(lock)的话,似乎一定要把mutex加进来,时序上先后保证了不就行了,为什么一定要加进来mutex。
void t1()
{
pthread_mutex_lock(lock);
pthread_cond_signal(notempty,lock);
pthread_mutex_unlock(lock);
}
void t2()
{
pthread_mutex_lock(lock);
pthread_cond_wait(notfull,lock) ;
pthread_mutex_unlock(lock);
}
int main(void){
pthread_t th_a,th_b;
void * retval;
Pthread_create(&th_a,NULL,t1,0);
Pthread_create(&th_b,NULL,t2,0);
/*等待两个线程结束*/
Pthread_join(th_a,&retval);
Pthread_join(th_b,&retval);
return 0;
}
|
以解决防止竞争wait()