作者回复: 是的,其实 PCB 与 TCB 就是针对进程和线程的两个不同的抽象概念,具体实现是可以多种多样的。简单来讲,Linux 在实现中没有为进程和线程单独设置用于存放相关信息的数据结构,而是统一使用 task_struct 存储通用的任务信息,使用 thread_info 存放平台相关的信息。区分是不是线程就看不同 task_struct 对象之间有没有共享资源。即你可以认为在 Linux 中只有进程(PCB),没有独立的线程(TCB)。而相较于 Windows 和 Sun Solaris 等明确区分进程与线程的操作系统实现,Linux 的实现相对更加优雅。 — 参考自《Linux Kernel Development 3rd Edition》,基于 2.6 版本内核。
作者回复: 回答的很棒!
作者回复: Windows 我用的少,盲猜 pthread 可能好用一些 hhh
作者回复: 大多数情况是由于编译器不支持 C11 的多线程特性,你可以通过检测宏常量 __STDC_NO_THREADS__ 来判断当前编译器是否支持 threads.h,然后仅在支持的情况下再 include。
作者回复: 主要是由于 CPU 流水线在执行指令时的顺序不确定性。乱序执行的目的本身还是在于提高指令执行性能。比如通过合理安排执行顺序,减少指令执行之间的数据等待,等等。
作者回复: 赞👍🏻
作者回复: 可以再描述的具体点?
作者回复: 嗯是的,确实是这样,大部分情况还是 posix。
作者回复: 哪一个函数没找到?