实际上,通常使用什么pthreads功能?

Mat*_*lin 5 posix pthreads

我正在研究我的操作系统项目的POSIX子系统,我已经达到了我想要在pthreads支持上工作的地步.但是,我不确定我应该在多大程度上实施它们.

什么是最常用的pthreads功能?有什么东西我现在可以安全地"存根"并在我们移植需要它的应用程序时实现它吗?到目前为止,我的研究指出了基本的线程操作(创建,连接等等) - 这是非常明显的 - 以及互斥支持.实际上,应用程序使用的远不止这些吗?

我想我只是想弄清楚,在仍然有一个有效的实现的情况下我可以逃脱多少.

pil*_*row 7

我建议一个简单的pthread实现覆盖以下函数(pthread_删除" "前缀):

  • 基本线程操作
    create,exit,join,detach,self,equal,和" attr"支持可结合的/可分离
  • 流程整合
    atfork,kill以及sigmask
  • 同步原语
    condmutex函数(仅默认属性 - 没什么特别的!),可能省略cond_timedwait

看看SUSv6条目<pthread.h>,我优先链接到SUSv7,因为版本6在此标题中有更多的选项组.我通过敲击任何可选功能组成上面的列表,然后删除我的个人历史和观察建议的非必要的其他功能集(例如,线程特定数据)或者非必要和危险(例如,线程取消).:)


小智 5

您肯定需要支持互斥锁和条件变量,因为如果没有它们,线程将无法使用,并且它们都被广泛使用.我想你可以在没有支持信号量的情况下离开(我认为这不是pthreads的一部分),但我无法想象没有它们的任何严肃的MT工作.

看看下一个提出的C++标准可能会很有意思,该标准将支持线程并实现它所需的功能.如果您的操作系统可以支持未来的标准C++程序,那么它的状态会非常好.