项目开发日报表——第七天
项目名称 | 【苏嵌实训-嵌入式 linuxC 第 7 天】 |
---|---|
今日进度以及任务 | 嵌入式Linux C文件编程、嵌入式Linux C多任务编程。 |
本日任务完成情况 (详细说明本日任务是否按计划完成,开发的代码量) | 按计划完成。编写代码实现在文件中输入多行和输出多行;编写代码实现线程的创建、退出、等待、状态(可结合态变为分离态)。 |
本日开发中出现的问题汇总 | 1.嵌入式为什么要移植操作系统? 2. 单任务和多任务; 3. 进程和线程; 4.如何避免多线程退出导致的内存泄露? 5.pthread_exit和return的区别? 6.线程资源为什么不采用进程退出之后一起回收? |
问题解答 | 1.答: (1)提供软件的移植性; (2)操作系统提供了多任务操作; (3)操作系统提供了丰富的网络协议栈; (4)操作系统将所有设备抽象成文件,方便访问设备。 2.答: (1)单任务:在一个任务执行期间,其他任务不能被调度; (2)多任务:当前CPU单核,存在任务并发,不存在任务并行;当前CPU是多核,既存在并发,也存在并行。 3.答: (1)进程:实现多任务的开销较大,因为每个进程都有4G的独立地址空间,导致进程间通信效率不高;优点是安全。 (2)线程:实现多任务的开销小,因为每个线程共享地址空间,通信效率高;缺点是不安全。 4.答: (1)每个可结合线程需要显示的调用pthread_join回收; (2)用线程分离函数pthread_detach将其变成分离态的线程。 5.答: pthread_exit()会清空弹出线程栈的所有内容,return不会弹出栈。 6.答: 有些程序(进程)一旦运行之后将会长期运行,不会结束,所以次线程在结束时必须回收资源。如果不回收,每结束一个次线程就导致一部分资源被占用,慢慢累积会使得整个进程资源越用越少,最后导致进程崩溃。 |
本日开发收获 | 掌握了Linux C文件编程的一些方法,更深入了解了进程线程的使用。 |
笔记 | lseek(fd,0,SEEK_SET);//将文件读写位置移动到文件头; 默认情况下,创建的线程是可结合态。 弹栈线程退出处理函数的几种条件: (1)调用thread_cleanup_pop(!0),主动出栈; (2)如果线程是被别人调用pthread_cancel取消的,会自动弹栈; (3)如果线程是调用pthread_exit函数退出的,也会自动弹栈; (4)注意:若使用return退出的话,是不会自动弹栈的,必须主动调用thread_cleanup_pop(!0) |