linux——创建线程及打印错误信息
1、创建线程创建线程‐‐pthread_create int pthread_create( pthread_t *thread), //线程ID 无符号长整型 const pthread_attr_t *attr, //线程属性NULL void *(*start_routine)(void *), //线程处理函数 void *arg); //线程处理函数 参数 pthread:传出参数线程创建成功之后会被设置一个合适的值 attr:默认传NULL start_routine:子线程的处理函数 arg: 回调函数的参数 返回值 成功:0 错误:错误号 //perror不能使用该函数打印错误信息 主线程先退出子线程会被强制结束 验证线程直接共享全局变量#includestdio.h #includepthread.h void* myfunc(void *arg) { printf(chile pthread id:%ld\n,pthread_self()); return 0; } int main() { pthread_t pthid; pthread_create(pthid,NULL,myfunc,NULL); printf(parent pthread id:%ld\n,pthread_self()); for(int i0;i5;i) { printf(i%d\n,i); } return 0; }为什么子线程不打印核心原理主线程退出 整个进程退出所有线程都会被强制销毁主线程的执行流程打印parent pthread id循环打印i0~4这几步执行极快微秒级直接执行return 0主线程退出子线程的执行流程刚被创建还没抢到 CPU 时间片还没执行printf主线程已经退出整个进程被操作系统回收子线程直接被杀死永远没机会执行#includestdio.h #includepthread.h #includeunistd.h void* myfunc(void *arg) { printf(chile pthread id:%ld\n,pthread_self()); return 0; } int main() { pthread_t pthid; pthread_create(pthid,NULL,myfunc,NULL); printf(parent pthread id:%ld\n,pthread_self()); for(int i0;i5;i) { printf(i%d\n,i); } sleep(2); return 0; }2、打印错误信息#includestdio.h #includepthread.h #includeunistd.h #includestring.h void* myfunc(void *arg) { printf(child pthread id:%ld\n,pthread_self()); return 0; } int main() { pthread_t pthid; int ret; ret pthread_create(pthid,NULL,myfunc,NULL); if(ret ! 0) { printf(error number is %d\n,ret); printf(%s\n,strerror(ret)); } printf(parent pthread id:%ld\n,pthread_self()); for(int i0;i5;i) { printf(i%d\n,i); } sleep(2); return 0; }strerror就是用来讲错误代码的表示的信息显示出来