图书馆的工作

时间:2012-09-26 20:05:00

标签: api operating-system libraries system-calls

我曾与< iostream> 和其他通用c ++库。除此之外,我还与<等图书馆合作过。 pthread.h>

现在,我已经读过,依赖于操作系统的系统调用允许库之间的接口和硬件上的功能实现。这在<的工作中很明显。 pthread.h>我们可以在Linux中使用但不能在Windows中使用。我对此的解释是在< pthread.h>函数使用UNIX 系统调用定义,Windows无法理解。

但是<的iostream>似乎在Linux和Windows中都能正常工作。现在我的问题是,即使是  < iostream>的功能需要根据Windows和Linux不同的系统调用来定义,那么<的iostream>适用于两种操作系统

PS:我知道根据我的想法,所有的库(即API)都将根据操作系统划分,或者库将以不同的形式用于不同的操作系统。

1 个答案:

答案 0 :(得分:0)

<iostream>是C ++标准的一部分,它为用户提供了一个接口,以便您可以在不同的操作系统上运行相同的C ++代码,尽管它们是通过下面的不同系统调用实现的。

<pthreads>POSIX(可移植操作系统接口)标准的一部分,其实现类似于实现多线程应用程序。

到目前为止一直很好..现在棘手的部分是Windows似乎不支持pthreads以及大多数其他POSIX标准,因为......好吧,它是非常规的。它有自己的线程库,而不是win32-threads

关于操作系统,我认为将它们分为两类,即windows和其他类似unix的操作系统(linux,macos,solaris等)是公平的。这并不是说Windows是一个邪恶的操作系统,只是他们有不同的目标。

如果您需要可移植的多线程应用程序,您可能需要使用更高级别的库,例如OpenMP(在Linux中使用pthreads实现,可能在Windows中使用win32-threads。或Intel TBB等等。

同样C++11将拥有它自己的内置线程支持,您可以在Windows和其他人中以相同的方式安全地使用它们,假设这些C ++编译器完全符合标准。

编辑:我忘了提及,有些项目旨在在CygwinInterix等窗口上实现POSIX标准(由microsoft开发但在Windows 8中已弃用) )。如果您想在Windows中使用<pthreads>,也可以使用这些。使用<pthreads>函数进行的线程调用将映射到本机窗口线程。