【发布时间】:2012-09-18 12:56:10
【问题描述】:
我曾使用过
现在,我读到操作系统相关的系统调用允许库和硬件上的功能实现之间的接口。这在
但
PS:我知道按照我上面的想法,所有的库(即API)都会根据操作系统进行划分,或者库会针对不同的操作系统以不同的形式出现。
【问题讨论】:
标签: api operating-system libraries system-calls
我曾使用过
现在,我读到操作系统相关的系统调用允许库和硬件上的功能实现之间的接口。这在
但
PS:我知道按照我上面的想法,所有的库(即API)都会根据操作系统进行划分,或者库会针对不同的操作系统以不同的形式出现。
【问题讨论】:
标签: api operating-system libraries system-calls
<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 将拥有自己的内置线程支持,假设这些 C++ 编译器完全符合标准,您可以在 Windows 和其他环境中以相同的方式安全地使用它。
编辑:我忘了提一下,有一些项目旨在在 Windows 上实现 POSIX 标准,例如 Cygwin 或 Interix(由微软开发,但在 Windows 8 中已弃用)。如果你想在 Windows 中使用<pthreads>,你也可以使用这些。您使用 <pthreads> 函数进行的线程调用将映射到本机 Windows 线程。
【讨论】:
<iostream>,作为编译器安装的一部分安装,类似于Linux 上的gcc 或Windows 上的cl.exe(Visual Studio 编译器)。由于gcc 不支持windows(至少本身不支持——如果你想更加困惑,请参阅mingw),反之亦然,在Linux 上存在的<iostream> 头文件中没有对windows 的系统调用系统(在我的电脑上检查过)。 (2) 是的,如果你排除 cygwin 和 interix