Linux系统编程-(pthread)线程创建与使用

说白了,Linux下执行线程的核心pthread是“一个共享的电子空间,通信简单但同步性好”,与进程完全不同。

来说说吧,首先来说说最重要的:线程创建的pthread_create函数。
去年我们在运行 2 000 学位项目时遇到了很多崩溃。
pthread_t是一个无符号长整型,不处理该规则; start_routine是一个函数指针,传递的参数必须是静态或全局变量。
否则,当字符串被释放时,location变量就会内存不足,并且不知道它指向哪里。
还有一点是必须使用 pthread_join 或 pthread_detach 来退出线程。
去年决定暂停该过程是因为他忘记加入。
说实话,挺尴尬的。
另一个是决定性的。
如果函数退出线程,则主线程直接退出,所有子线程也随之退出。
pthread_exit 用于退出单个线程。

一开始我以为线程越多,速度就越快,但后来我发现我错了。
在语言中,这种效果被称为“SNOW CASE”。
在迹象面前犹豫了一下。
例如,如果您忽略正确添加互斥体头发,则如果一根头发被卡住,所有其他头发都将不得不等待。
等等,还有别的事。
续集状态报告使用起来很方便,但是如果使用不当也很容易出现问题。
例如,如果忘记评估返回值并进行绑架,那么当线程异常退出时,资源将无法回收。

最终警告:清理函数 pthread_cleanup_push/pop。
很多人不注意pthread_cleanup_pop的第二个参数。
默认为1 你应该为pthread_cleanup_pop(1 )编写,否则线程异常退出时清理函数根本不会运行。

Linux内核分析:理解Linux操作系统的核心

uclinux和linux的区别是什么

简介: uClinux 是Linux 的精简版本。
主要区别是缺乏 MMU 支持。

内存管理: Linux使用MMU作为虚拟内存。
uClinux直接使用物理内存。
uClinux进程共享内存,没有保护。
uClinux 无法分页并且需要持久内存。
uClinux内存分配容易产生碎片。
工艺创新: Linux使用fork+copy-write。
uClinux使用vfork来共享父进程的内存。
uClinux 子进程应该立即运行。

进程堆栈管理: Linux 堆栈是动态可扩展的。
uClinux 堆栈大小在编译时是固定的。
uClinux使用mmap代替动态分配。

适用文件: Linux 使用 ELF 并且需要 PIC。
uClinux使用平面格式,没有PIC。
平面格式 1 6 位位限制为 3 2 KB。
影响来自: uClinux 取代了内存管理子系统和 malloc 实现。
uClinux 用户程序应转换为平面格式。

说实话,uClinux适合没有MMU的坏设备,但是它有很多限制。