0

私はコンピュータ サイエンスを勉強している 3 年目なので、おそらくこの質問に対する答えはすでにわかっているはずですが、それでもわかりません。とにかく、私は現在、学位を取得するために OS コースを受講しており、C のシグナル、セマフォ、スレッドなどの新しいプログラミング概念を数多くカバーしてきました。残念ながら、私の教授は Linux/OS でこれらすべてをカバーしています。 X視点。64 ビットの Windows マシンを使用している私にとって、これが意味することは、アラーム シグナルのインストールや、セマフォと pthread の使用などは、(私が知る限り) 私のマシンではコンパイルまたは実行されないということです。

とにかく、現在、私は Linux を実行している VM で自分の割り当てを行っているだけで、これまでのところうまく機能していますが、コーディングには Windows 環境の方がずっと好きです。

では、ご想像のとおり、これらすべての機能 (アラーム信号、セマフォ、pthreads など) を使用してコーディングし、Windows でコンパイルしてテストできるようにする方法はありますか? ? Windows OS がアラーム信号をサポートしておらず、POSIX 機能が制限されていることは十分承知していますが、cygwin について噂が飛び交っているのを聞いたことがあります。これらの機能を使用するためにバックグラウンドで実行できる Linux カーネル。

とにかく、誰かが私に推奨するオプションのリストを提供できる場合(それが私の最良のオプションであると考えていても、できればVMに固執しないでください)、そしておそらくいくつかのヒント、長所、短所、セットアップガイド、または、これらのオプションの空でないサブセットを本当に感謝します。また、あなたが尋ねる前に、私たちは課題で C と上記のプログラミング機能を使用する必要があるため、残念ながら win32 オプションの Java またはコードへの切り替えはありません :(

知恵の言葉を貸してくれる人に前もって感謝します:)

4

2 に答える 2

3

基本原則はすべて Windows にありますが、やり方が異なります。また、Windows 用にプログラミングする場合は、Cygwin のようなエミュレーション レイヤーではなく、Windows API で行うことをお勧めします。どちらかといえば、オペレーティング システムが異なれば、シグナル伝達とプロセス処理に対して異なるアプローチが取られていることがすぐにわかります。

最初に注意すべきことは、Windows ではスレッドがはるかに軽量であるのに対し、プロセスは非常に重いということです。そのことを念頭に置いて、Windows プログラムは、スレッドを使用するときに最も効率的に動作します。非常によく知るべきCriticalSectionの概念があります。そしてセマ​​フォオブジェクト。API を読み続けると、これらのトピックに関する豊富な情報を見つけることができます。Microsoft のドキュメントは実際にはかなり優れています。Windows API について理解しておくべき重要なことは、ほとんどの場合、それを使用する前に、新しいオブジェクトを "作成/取得" (およびハンドルを取得) する必要があるということです。また、Windows はハンドルが多すぎるプログラムを好みません。

個人的には POSIX API が好きで、Linux が大好きです。しかし、Windows で適切に処理したい場合は、Windows OS API を使用する必要があることに感謝します。結果と方法は多少異なる場合がありますが、彼らはこれについて慎重に検討しています。

PS Windows には「アラーム」がありません。これはおそらく、Unix/Linux ユーティリティを Windows に単純に移植するための唯一の最も禁止的な障壁です。(それと、Windows プロセスはインターネット/ソケットのサポートを使用する前に「ブートストラップ」する必要があるのに対し、Linux プロセスは問題なく使用できるという事実)。

于 2013-07-06T17:57:35.067 に答える
1

GNU ツールチェーンのWindows ポートであるMinGW-w64と、Windows スレッド API の POSIX ラッパーであるPthreads-win32があります。

私はmingw64-x86_64、2 つの理由から直接ではなく、Cygwin クロスコンパイラ パッケージ (現在はやや古い gcc 4.5.3 を提供しています) を介してこれらを使用しています。

Pthreads-win32 が POSIX にどの程度準拠しているかはわかりませんが、LLVM と Clang の両方がこのセットアップでコンパイルされることは確認できます。

于 2013-07-06T21:08:55.560 に答える