2012-09-26 8 views
0

我曾與< iostream>和其他一般C++庫。除此之外,我還與圖書館合作,如< pthread.h>。庫的工作

現在,我已經看到,系統調用是依賴操作系統允許庫和硬件上的功能實現之間的接口。這在pthread.h> <的工作中很明顯,我們可以在Linux中使用它,但不能在Windows中使用。我的解釋是,在<之內,pthread.h>函數是使用UNIX 系統調用定義的,Windows不能理解這些函數。

但是< iostream>似乎在Linux和Windows都可以正常工作。現在我的問題是,即使
< iostream>的功能將需要定義的系統調用,這是不同的Windows和Linux,那麼它是如何,< iostream>工作正常在操作系統。 PS:我知道根據我上面的想法,所有庫(即API)將根據操作系統進行劃分,或者庫將針對不同的操作系統以不同的形式出現。

回答

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標準(由微軟開發的,但在Windows 8中不建議使用)。如果你想在窗口中使用<pthreads>,你也可以使用這些。使用<pthreads>函數進行的線程調用將映射到本機窗口線程。

+0

@gokcehan ...所以請糾正我,如果我錯了...(1)像< iostream>這樣的C++標準庫有兩套針對每個函數的定義。一套使用Windows系統調用定義函數,另一套使用類Unix操作系統系統調用定義函數。執行的集合由編譯器根據(2)pthreads和其他posix庫只有一組使用unix系統調用的定義。(3)Cygwin或interix使用與pthreads相同的函數簽名,但在定義它們時,它們包括win32線程並使用它的函數來定義它們。 – avinash

+0

(1)諸如''之類的C++庫頭文件作爲編譯器安裝的一部分安裝,如linux上的'gcc'或者windows上的'cl.exe'(visual studio編譯器)。由於'gcc'不支持windows(至少不是本地的 - 如果你想更困惑,請參閱[mingw](http://mingw.org/)),並且vica也是如此,因爲沒有windows的系統調用''Linux系統上存在的頭文件(在我的計算機上檢查過)。 (2)是的,如果你排除cygwin和interix – none

+0

(3)我猜是的(不能檢查,因爲我沒有安裝它們)(4)事物並不總是黑白的,因此一個寬鬆的理解將最除非你是內核黑客,否則對於大多數目的來說就足夠了。 – none