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()在没有加入条件变量时,多线程均可并行执行。