0

我曾使用过<iostream>和其他通用 c++ 库。除此之外,我还使用过像<pthread.h> 这样的库。

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

但是 <iostream> 似乎在 Linux 和 Windows 中都可以正常工作。现在我的问题是,即使
<iostream> 的函数也需要根据 Windows 和 Linux 不同的系统调用来定义,那么<iostream> 如何在两个 OS 上都能正常工作

PS:我知道按照我上面的想法,所有的库(即API)都会根据操作系统进行划分,或者库会针对不同的操作系统以不同的形式出现。

4

1 回答 1

0

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

<pthreads>POSIX(便携式操作系统接口)标准的一部分,具有类似的目标,用于实现多线程应用程序。

到目前为止一切顺利.. 现在棘手的部分是 Windows 似乎pthreads不像大多数其他 POSIX 标准那样支持,因为.. 嗯,它是非常规的。win32-threads相反,它有自己的线程库。

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

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

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

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

于 2012-09-26T20:47:20.503 回答