对线程的深入学习(三)
来源:互联网 发布:linux翻墙方法 编辑:程序博客网 时间:2024/05/01 00:19
1. 线程执行轨迹
1) 同步方式(非分离状态):创建线程之后调用pthread_join函数等待其终止,并释放线程资源。
2) 异步方式(分离状态):无需创建者等待,线程终止后自行释放资源
int pthread_detach (pthread_t thread);使thread参数所标识的线程进入分离(DETACHED)状态。处于分离状态的线程终止后自动释放线程资源,且不能被pthread_join函数等待
成功返回0,失败返回错误码。
// 异步方式创建子线程,也叫分离态#include <stdio.h>#include <string.h>#include <unistd.h>#include <pthread.h>void* thread_proc (void* arg) {int i;for (i = 0; i < 200; i++) {putchar ('-');usleep (50000);}return NULL;}int main (void) {setbuf (stdout, NULL);//关闭缓冲区pthread_t tid;int error = pthread_create (&tid, NULL, thread_proc, NULL);if (error) {fprintf (stderr, "pthread_create: %s\n", strerror (error));return -1;}if ((error = pthread_detach (tid)) != 0) { //如果没有这个函数,子线资源永远不会被回收,主线程如果一直不结束,子线程的资源就会越来越多fprintf (stderr, "pthread_detach: %s\n", strerror (error));return -1;}/*if ((error = pthread_join (tid, NULL)) != 0) { //用这个函数代替分离函数,会先打印200个“-”后打印200“+”fprintf (stderr, "pthread_join: %s\n", strerror (error));return -1;}*/int i;for (i = 0; i < 200; i++) {putchar ('+');usleep (100000);}printf ("\n");return 0;}
2. 线程属性
int pthread_create (pthread_t* restrict thread, const pthread_attr_t* restrict attr, void* (*start_routine) (void*), void* restrict arg);
创建线程函数的第二个参数即为线程属性,传空指针表示使用缺省属性。
1)获取线程属性
第一步,获取线程属性结构体
int pthread_getattr_np (pthread_t thread,pthread_attr_t* attr);
第二步,获取具体线程属性项
具体函数参考点击打开链接
2) 设置线程属性
第一步,初始化线程属性结构体
int pthread_attr_init (pthread_attr_t* attr);
第二步,设置具体线程属性项
第三步,以设置好的线程属性结构体为参数创建线程
int pthread_create (...);
第四步,销毁线程属性结构体
int pthread_attr_destroy (pthread_attr_t* attr);
0 0
- 对线程的深入学习(三)
- 对线程的深入学习(一)
- 对线程的深入学习(二)
- 深入学习JDK 线程池(之三)
- 对cookie的深入学习
- 线程学习(三)
- SNMP++的深入学习(三)
- 线程学习 (三) 线程池的使用
- MemCache深入学习(三)
- 深入Struts2学习(三)
- 深入Java线程管理(三):线程同步
- 线程池的学习与深入研究
- javascript学习记录(三)-this对象的深入理解
- 对ConcurrentHashMap的深入理解和学习
- 对线程调度中Thread.sleep(0)的深入理解
- 对线程调度中Thread.sleep(0)的深入理解
- 多线程学习总结(十)——线程安全之线程间的通信深入
- 三类设计模式的深入学习
- OGG-01031 由于网络中断导致datapump进程ABENDED的恢复方法
- MyBatis知多少(23)MyBatis结果映射
- 黑马程序员——Java学习总结:转换流和流的操作总结
- MyBatis知多少(23)MyBatis结果映射
- MyBatis知多少(23)MyBatis结果映射
- 对线程的深入学习(三)
- 黑马程序员——泛型(Generic)的理解和使用
- MyBatis知多少(23)MyBatis结果映射
- hdu 2546 饭卡
- SQL注入漏洞
- maven查找依赖方法 .
- 记录实习初期
- hibernate 注解 级联保存
- 黑马程序员——Java学习总结:反射