linux(十一)
来源:互联网 发布:windows phone软件下载 编辑:程序博客网 时间:2024/06/06 12:23
一.多线程 1.了解多线程 解决多任务实现。 历史上Unix服务器不支持多线程 Unix/Linux上实现多线程有两种方式: 内核支持多线程 使用进程的编程技巧封装进程实现多线程:轻量级多线程 多线程的库: libpthread.so -lpthread pthread.h 2.创建多线程 2.1.代码? 回调函数 2.2.线程ID? pthread_t 2.3.运行线程? pthread_create int pthread_create( pthread_t *th,//返回进程ID const pthread_attr_t *attr,//线程属性,为NULL/0,使用进程的默认属性 void*(*run)(void*),//线程代码 void *data);//传递线程代码的数据 结论: 1.程序结束所有子线程就结束 解决办法:等待子线程结束 sleep/pause int pthread_join( pthread_t tid,//等待子线程结束 void **re);//子线程结束的返回值 2.创建子线程后,主线程继续完成系统分配时间片。 3.子线程结束就是线程函数返回。 4.子线程与主线程有同等优先级别. 3.线程的基本控制 线程的状态: ready->runny->deady | sleep/pause 结束线程? 内部自动结束:(建议) return 返回值;(在线程函数中使用) void pthread_exit(void*);(在任何线程代码中使用) 外部结束一个线程. pthread_cancel(pthread_t); 线程开始 4.多线程的问题 数据脏 5.多线程问题的解决 互斥锁/互斥量 mutex 1.定义互斥量pthread_mutex_t 2.初始化互斥量 1 pthread_mutex_init 3.互斥量操作 置0 phtread_mutex_lock 判定互斥量0:阻塞 1:置0,返回 置1 pthread_mutex_unlock 置1返回 强烈要求成对使用 4.释放互斥量pthread_mutex_destroy 结论: 互斥量保证锁定的代码一个线程执行, 但不能保证必需执行完! 5.在lock与unlock之间,调用pthread_exit? 或者在线程外部调用pthread_cancel? 其他线程被永久死锁. 6.pthread_cleanup_push { pthread_cleanup_pop } 这对函数作用类似于atexit 注意: 这不是函数,而是宏. 必须成对使用 6.多线程的应用 二.多线程同步 互斥量/信号/条件量/信号量/读写锁 1.sleep与信号 pthread_kill向指定线程发送信号 signal注册的是进程的信号处理函数. pthread_kill+sigwait控制进程 1.1.定义信号集合 1.2.初始化信号集合 1.3.等待信号 1.4.其他线程发送信号 1.5.清空信号集合 案例: sigwait实际处理了信号 如果进程没有处理信号,目标线程也没有sigwait ,则进程会接收信号进行默认处理 2.条件量 信号量类似 2.1.定义条件量 2.2.初始化条件量 2.3.等待条件量 2.4.其他线程修改条件量 2.5.释放条件量案例: 创建两个线程. 一个线程等待信号 一个线程每隔1秒发送信号 1.使用pause+pthread_kill pthread_cond_*** 与sigwait都是进程同步控制 pthread_cond_***稳定 pthread_cond_***在环境下不会死锁.课堂练习: 使用条件量与互斥构造死锁程序.
0 0
- linux(十一)
- Linux Socket 学习(十一)
- Linux学习笔记(十一)
- Linux Socket 学习(十一)
- Linux学习笔记(十一)
- Linux每日学习(十一)
- Linux学习日志(十一)
- linux学习笔记(十一)
- Linux系统基础(十一)
- LINUX学习笔记(十一)
- Linux(十一)
- Linux程序设计(Linux shell编程十一)
- Linux学习笔记(二十一)
- linux命令(十一):nl命令
- linux环境下C编程(十一)
- linux系统分析工具之iotop(十一)
- Linux学习笔记(十一、帮助命令)
- Linux命令之文件系统(十一)
- 博弈之Nim游戏
- mysql修改用户密码
- UVA 10285 Longest Run on a Snowboard
- Girls and Boys
- hdu 2647 Reward
- linux(十一)
- JavaScript的闭包
- BFS-UVA-11624-Fire!
- 数据结构实验:连通分量个数
- 第二十天 Android环境搭建
- const指针与指向const类型的指针
- gem install json失败
- 连通网络
- 窗体坐标和区域大小各种位置信息