linux多线程中分别使用pthread_detach()和pthread_join()在加入了条件变量后的区别

2 篇文章 0 订阅

1、pthread_detach()

        在线程中使用分离态pthread_detach()时,线程函数需要再次调用才能够启动,而使用pthread_join()则无需如此。

        解释如下代码,pthread_cond_wait()函数在触发之后会进行加锁,并往下执行,执行完;再次回到pthread_cond_wait()函数时,会进行解锁,且阻塞等待下次的触发。

void *comFinger(void *arg)
{
	pthread_mutex_lock(&mt_finger);
	while (1)
	{
		pthread_cond_wait(&ct_finger, &mt_finger);
		printf("1 comfinger...\n");
	}
	pthread_mutex_unlock(&mt_finger);
}

        建立多个类似以上的线程,然后通过下面的条件变量发送signal以触发上面的pthread_cond_wait()函数。同时触发多个线程时,它们会并行执行。

if (pthread_mutex_trylock(&mt_finger) == 0) {
	pthread_cond_signal(&ct_finger);
	pthread_mutex_unlock(&mt_finger);
}

       

2、pthread_join()

        如果将pthread_detach()函数换成了pthread_join()函数,同时触发多个线程,结果将会发送变化。就比如执行以下的触发,那么将会只执行最后一个触发的线程,前面两个触发的线程不会被执行。

if (pthread_mutex_trylock(&mt_finger) == 0) {
	pthread_cond_signal(&ct_finger);
	pthread_mutex_unlock(&mt_finger);
}
	
if (pthread_mutex_trylock(&mt_door) == 0) {
	pthread_cond_signal(&ct_door);
	pthread_mutex_unlock(&mt_door);
}
	
if (pthread_mutex_trylock(&mt_pc) == 0) {
	pthread_cond_signal(&ct_pc);
	pthread_mutex_unlock(&mt_pc);
}

       

3、pthread_detach()和pthread_join()在没有加入条件变量时,多线程均可并行执行。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值