当前位置: 代码迷 >> 综合 >> 线程优先级学习笔记
  详细解决方案

线程优先级学习笔记

热度:72   发布时间:2024-01-27 02:19:40.0

刚刚学习线程,有一点记录一点。

#include <pthread.h>
#include <stdio.h>pthread_mutex_t mutex ;
void *print_msg(void *arg){int i=0;printf("this is %d\n",(int*)arg);pthread_mutex_lock(&mutex);for(i=0;i<3;i++){printf("output %d: %d\n",(int*)arg, i);//sleep(1);}pthread_mutex_unlock(&mutex);
}
int main(int argc,char** argv){pthread_t id1;pthread_t id2, id0;pthread_mutex_init(&mutex,NULL);pthread_create(&id2,NULL,print_msg,(void*)2);pthread_create(&id1,NULL,print_msg,(void*)1);pthread_create(&id0,NULL,print_msg,(void*)0);pthread_join(id2,NULL);//pthread_join(id1,NULL);pthread_mutex_destroy(&mutex);return 1;
}

运行结果为:

this is 0
output 0: 0
output 0: 1
output 0: 2
this is 1
output 1: 0
output 1: 1
output 1: 2
this is 2
output 2: 0
output 2: 1
output 2: 2

一开始是很疑惑,为什么怎么改pthread_join的顺序,都是先运行0,pthread_join不是把当前线程阻塞,等待子线程运行完吗,那先运行哪个不是看pthread_join的顺序么。

后来改了下pthread_create的顺序,发现是先创建的,最后运行,查了下原来是按默认的线程优先级,后创建的优先级高。

pthread_join是阻塞当前线程,按照刚才的思路,我就把pthread_join改为id1,果然,id2那部分就不会打印出来,因为优先级低于1,系统主线程只会阻塞到id1结束。

  相关解决方案