2013-07-06 49 views
0

我在學習計算機科學的第三年,所以我應該應該已經知道這個問題的答案了,但是, 「T。無論如何,我正在爲我的學位學習操作系統課程,並且我們一直在涵蓋很多新的編程概念,例如C語言中的信號,信號量和線程。不幸的是,我的教授在Linux/OS中覆蓋了所有這些概念X的角度。這對我來說意味着,在64位Windows機器上,安裝報警信號或使用信號量和pthreads將無法在我的機器上編譯或運行(據我所知)。在Windows中的高級C編程(pthreads,信號和信號量,哦,我的!)

無論如何,目前我剛剛在運行Linux的虛擬機上做了我的任務,迄今爲止運行良好,但我更喜歡Windows環境進行編碼。所以,在那個沉悶的介紹之後,我的問題是,正如你可能已經猜到的那樣,是否有一種方法可以編碼所有這些功能(報警信號,信號量,pthreads等),並且能夠編譯和在Windows中測試它們?我完全意識到Windows操作系統不支持報警信號,並且POSIX功能有限,但我聽說有關cygwin(我嘗試上班,但不是很難:P)和微型您可以在後臺運行的Linux內核使用這些功能。無論如何,如果任何人都可以給我一個他們會推薦的選項列表(儘管我認爲這可能是我最好的選擇,但最好不要與你的虛擬機保持一致),也許有些提示,優點,缺點,也許一個設置指南,或者這些選項真的非空子集,我真的很感激它。此外,在你問之前,我們必須在我們的作業中使用C和上述編程功能,所以沒有切換到Java或在Win32選項中的代碼不幸:(

在此先感謝任何人可以借用一些字智慧:)

+0

我認爲Raspberry Pi系統的成本大約爲60歐元,並且能夠運行Linux。您可以使用例如遠程編程。 SSH或Cygwin的X服務器。這是一個很好的玩具! –

+0

另一種類似於虛擬機的選擇,但在我看來最後的麻煩是使用亞馬遜網絡服務。如果您的任務在計算上不昂貴,可以在AWS上的微型實例上免費運行它們。一個小小的學習曲線可以讓它發揮作用,但一旦有了它,當你需要它們的時候,從windows訪問linux機器的好方法不會給你的機器帶來額外的壓力 – sedavidw

回答

1

MinGW-w64 - GNU工具鏈的Windows端口 - 和Pthreads-win32,Windows線程API的POSIX包裝器。

我使用這些通過mingw64-x86_64 Cygwin交叉編譯器軟件包(目前提供有點過時的gcc 4.5.3),而不是直接出於兩個原因:首先,我需要GNU工具箱中的其他內容,其次是因爲的包管理器。

我不確定Pthreads-win32符合POSIX的程度,但我可以確認LLVM和Clang都使用此設置進行編譯。

3

基本原理都在Windows中有,但做法不同。我建議,如果您要爲Windows編程,您可以在Windows API中執行此操作,而不是通過像Cygwin這樣的仿真層執行此操作。如果有任何問題,您很快就會知道,不同的操作系統採取不同的信號和流程處理方法。

首先要注意的是,線程在Windows中輕量得多,而進程明顯更重。考慮到這一點,Windows程序在使用線程時運行效率最高。有一個你應該非常熟悉的CriticalSection的概念。和Semaphore Object。繼續閱讀API,你會發現關於這些主題的大量信息 - 微軟文檔實際上是相當不錯的。理解Windows API的關鍵之處在於,在使用它之前,您幾乎總是必須「創建/獲取」一個新對象(並獲取一個句柄)。而Windows不喜歡具有太多句柄的程序。

我個人喜歡POSIX API並對Linux有愛。但是我很欣賞,如果你想在Windows中正確地做事情,你應該使用Windows操作系統API--他們已經仔細考慮了這一點,儘管結果和方法可能有些不同。

PS Windows沒有「警報」。它可能是將Unix/Linux實用程序簡單移植到Windows的最大障礙。 (這一點以及Windows進程在使用它之前必須「引導」Internet /套接字支持的事實,而Linux進程很適合)。

+0

實際上,我意識到Windows API的功能,但作爲這是爲了學校,我需要使用教授使用的東西。這意味着我需要爲所有信號,信號量和線程使用POSIX API,並且在Linux(實際上是Unix)計算機上運行時,我的提交任務應該正常運行。所以,基本上Windows API不適合我。因此,在Windows中運行這些POSIX功能的任何其他選項都非常感謝:) – Andrewziac

+0

個人而言,我的手下是[Colinux](http://www.colinux.org/),它將Linux VM作爲Windows進程運行(所以您也可以在Windows內運行Linux的情況下運行Windows)。但是你已經有了一個虛擬機。而CoLinux可能在64位主機操作系統上遇到麻煩。現在所有的孩子都在使用別的東西..也許VirtualBox?我不記得了。 –