多线程之线程控制与互斥
1.线程的缺点有哪些? 第一点 健壮性低------ 一个线程挂了容易影响另外的线程 第二点 缺乏访问控制----- 不像进程是独立的,可以写时拷贝,线程随进随出有点危险哦 第三点 编写难度上升----- 编写一个多线程的代码和调试可比单线程难多了 ——————————————————————————————————————————
2.pthread_join函数怎么用? nullptr 位置是要输入一个**void类型 也就是指针的指针。 ———————————————————————————————————————————
3.指针作为输出型参数,能不能写个代码验证下?
程序1: void myMalloc(char *s) //在函数中分配内存,再返回 { s=(char *) malloc(100); } void main() { char *p=NULL; myMalloc(p); //这里的p实际还是NULL,p的值没有改变 if(p) free(p); } 程序2: void myMalloc(char **s) //指针的指针,双重指针类型 { *s=(char *) malloc(100); } void main() { char *p=NULL; myMalloc(&p); //这里的p可以得到正确的值 if(p) free(p); }
———————————————————————————————————————————
4.exit(10)是退出线程还是进程? 退出整个进程。 要用调用pthread_exit((void*)13)函数。 ———————————————————————————————————————————
5.取消线程用哪个函数?线程被取消返回什么? 用 pthread_cancel(tid)函数,线程被取消返回-1 ———————————————————————————————————————————
6.pthread_tid的具体含义是什么? pthread动态库加载到内存中,将地址映射到地址空间里的共享区,为了让线程更好的找到自己在共享区里的具体位置以调用pthread,所以tid为pthread库在共享区的一个类或者结构体的起始地点地址。 以后多线程就用共享区里的栈空间了。 ———————————————————————————————————————————
7.什么叫线程局部存储? 线程的局部存储由 __thread 关键字实现 定义一个全局变量 比如 int a = 10; 在不同的线程修改,每一个线程打印出来的a都是一样的 但这样写 __thread int a = 10; 则每个线程独享一个int a 变量。 ———————————————————————————————————————————
8.线程调用execl(程序替换)会怎么样? 新线程被完全替换,并退出,而主线程不执行原来的代码,而是去执行替换后的代码,相当于任意一个线程调用了execl,就是进行了进程替换。 ——————————————————————————————————————————— 9.线程分离用哪个函数? 分离线程后既不用等待新线程,又不用释放新线程的资源,啥都不用管。 ——————————————————————————————————————————— 10.相关知识
如果风景早已不在 我想我谁都不爱。