0

< iostream>やその他の一般的な C++ ライブラリを使用してきました。それ以外にも、< pthread.h> などのライブラリを使用しました。

さて、オペレーティング システムに依存するシステム コールによって、ライブラリ間のインターフェイスとハードウェア上の機能実装が可能になることを読みました。これは、Linux では使用できますが Windows では使用できない < pthread.h> の動作で明らかです。これについての私の説明は、< pthread.h> 関数の内部では、Windows では理解できないUNIXシステム コールを使用して定義されているということです。

しかし、< iostream> は Linux と Windows の両方で問題なく動作するようです。ここで私の質問は、< iostream> の機能でさえ
Windows と Linux で異なるシステム コールに関して定義する必要があるということです。

PS: 上記の私の考えによれば、すべてのライブラリ (API など) はオペレーティング システムごとに分割されるか、ライブラリはオペレーティング システムごとに異なる形式で提供されることを知っています。

4

1 に答える 1

0

<iostream>C++ 標準の一部であり、ユーザーにインターフェイスを提供するため、同じ C++ コードを異なるオペレーティング システムで実行できますが、それらは異なるシステム コールで実装されています。

<pthreads>POSIX (Portable Operating System Interface) 標準の一部であり、マルチスレッド アプリケーションを実装するための同様の目的があります。

pthreadsここまではうまくいっています..ここで注意が必要なのは、Windows が他のほとんどの POSIX 標準と同様にサポートしていないように見えることです..まあ、それは型にはまらないからです。代わりに、独自のスレッドライブラリがありwin32-threadsます。

オペレーティング システムに関しては、windows と他の UNIX ライクなオペレーティング システム (linux、macos、solaris など) の 2 つのクラスに分けるのが妥当だと思います。Windows が悪意のあるオペレーティング システムであると言っているわけではありません。目的が異なるだけです。

ポータブルなマルチスレッド アプリケーションが必要な場合は、OpenMP (Linux で実装さpthreadsれ、おそらくwin32-threadsWindows のようなもの) やIntel TBBなどの高レベル ライブラリを使用することをお勧めします。

また、C++11には独自の組み込みスレッド サポートがあり、これらの C++ コンパイラが完全に標準に準拠していると仮定すると、Windows などで同じ方法で安全に使用できます。

編集:言い忘れましたが、CygwinInterix (Microsoft によって開発されましたが、Windows 8 では廃止されました) などの Windows に POSIX 標準を実装することを目的としたプロジェクトがいくつかあります。<pthreads>Windowsで使用したい場合は、これらも使用できます。<pthreads>関数を使用して行ったスレッド呼び出しは、ネイティブ Windows スレッドにマップされます。

于 2012-09-26T20:47:20.503 に答える