Linux 线程与其他操作系统相比如何?

特性 Posix Solaris Win32 Linux
内核 BB CL DCE FSU JK Lt LWP Nt PCt Pt Qt Rex
用户-/内核空间 不适用 内核&用户 内核 内核 内核 内核 ? 用户 内核 内核 用户 用户 用户 用户 用户 用户
取消 X - - X - X X X - -
优先级调度 [1] X X X X - - X X - -
优先级反转处理 [2] X X X ? - - - - - -
互斥锁属性 X X - ? - X X - - -
共享和私有互斥锁 X X - ? - - - - - -
线程属性 X X - X - X X X - -
同步 X X X X - X X X X -
堆栈大小控制 X X X X X X - X X -
基地址控制 [3] X X - 不适用 - X - - - -
分离线程 X X - X X X X - - -
可连接线程 X X - X - X X - X -
每线程数据处理函数 X X X X - X X X - -
每线程信号处理 X X X X X X X[4] X[8] X[4] -
条件变量 X X ? ? - X X - X -
信号量 X X X X - - - X X -
线程 ID 比较 X X - X - - X X X[9] -
单次调用函数 X X - X - - X ? - -
线程挂起 [5] - X X X - - X X - -
指定并发性 - X X[6] - - - - - X[10] -
读者/写者共享锁 [3] - X - - - - - - - -
处理器特定线程分配 - - X - - - - - - -
派生所有线程 [7] - X - X - - - X - -
仅派生调用线程 [7] X X - ? - - X - X -

注释

  1. Linux 内核空间线程是进程,并且与其他操作系统中多线程操作系统不同,Linux 内核空间线程的处理方式与 fork 任务的处理方式没有区别。 因此,进程调度、取消、挂起等操作通过信号控制。
  2. Posix 和 Solaris 将线程优先级与互斥锁关联,并使用阻塞线程的互斥锁的优先级来更改阻塞线程的优先级。 Win32 和 Linux 让调度器决定提升哪个线程的优先级。
  3. Solaris 的奇怪之处。 不适用于大多数其他操作系统。
  4. 信号在每个线程的基础上接收,但线程为给定信号共享信号处理程序。
  5. Posix 没有规定挂起和恢复线程的功能。 Solaris 实现了它,因为他们需要它:程序可以更改某些线程的属性,除非它被挂起。
  6. 仅限多处理器系统。
  7. Win32 没有直接等同于 unix 的 fork() 系统调用,但您可以使用 CreateProcess() 和 CreateRemoteProcess() 调用来伪造它 [并且需要一点运气]。
  8. SIGIO 和 SIGALARM 是多路复用的。
  9. 有一个函数 "nthread_self()" 来获取调用线程的 ID。
  10. 您可以指定一次将使用多少用户级线程。 然后,内核级线程的数量(即并发级别)确定为 min([要使用的最大线程数],[可用处理器数])。


[Left Arrow]

[Home]

[Book Search]

[Mailbox]

[Right Arrow]

[上一页] [首页] [字典] [邮件作者] [下一页]