0

我正在学习计算机科学的第三年,所以我可能实际上应该已经知道这个问题的答案,但尽管如此,我不知道。无论如何,我目前正在攻读操作系统课程,我们一直在学习许多新的编程概念,例如 C 中的信号、信号量和线程。不幸的是,我的教授在 Linux/OS 中涵盖了所有这些X 视角。这对我来说意味着,在 64 位 Windows 机器上,安装警报信号或使用信号量和 pthread 之类的东西不会在我的机器上编译或运行(据我所知)。

无论如何,目前我刚刚在运行 Linux 的 VM 中完成我的作业,到目前为止它运行良好,但我更喜欢 Windows 环境进行编码。

所以,在冗长的介绍之后,我的问题是,正如您可能已经猜到的那样,有没有一种方法可以使用所有这些功能(警报信号、信号量、pthread 等)进行编码,并能够在 Windows 中编译和测试它们? 我完全知道 Windows 操作系统不支持警报信号并且 POSIX 功能有限,但我听说过关于 cygwin 的谣言(我确实尝试过工作,但不是很努力:P)和 micro可以在后台运行的 Linux 内核以使用这些功能。

无论如何,如果有人可以给我一个他们会推荐的选项列表(最好不要坚持使用你的虚拟机,即使我认为这可能是我最好的选择),也许还有一些提示、优点、缺点,也许是设置指南,或者这些选项的任何非空子集,我都会非常感激。另外,在你问之前,我们必须在我们的作业中使用 C 和上面提到的编程特性,所以很遗憾没有切换到 Java 或 win32 选项中的代码:(

提前感谢任何可以提供一些智慧之言的人:)

4

2 回答 2

3

基本原则都存在于 Windows 中,但做法不同。我建议,如果您要为 Windows 编程,请在 Windows API 中执行此操作,而不是通过像 Cygwin 这样的仿真层。如果有的话,您将很快了解到不同的操作系统采用不同的方法来处理信号和进程。

首先要注意的是,Windows 中的线程要轻得多,而进程要重得多。考虑到这一点,Windows 程序在使用线程时运行效率最高。您应该非常熟悉CriticalSection的概念。和信号量对象。继续阅读 API,您会发现有关这些主题的大量信息 - Microsoft 文档实际上相当不错。要了解 Windows API 的一个关键点是,您几乎总是必须“创建/获取”一个新对象(并获得一个句柄)才能使用它。而且 Windows 不喜欢有太多句柄的程序。

我个人喜欢 POSIX API 并且热爱 Linux。但我很感激,如果你想在 Windows 中正确地做事,你应该使用 Windows 操作系统 API——即使结果和方法可能有些不同,他们也仔细考虑了这一点。

PS Windows 没有“警报”。这可能是简单地将 Unix/Linux 实用程序移植到 Windows 的最大障碍。(这和事实是 Windows 进程在使用它之前必须“引导” Internet/socket 支持,而 Linux 进程很好用)。

于 2013-07-06T17:57:35.067 回答
1

MinGW-w64 - GNU 工具链的 Windows 端口 - 和Pthreads-win32,Windows 线程 API 的 POSIX 包装器。

我通过mingw64-x86_64Cygwin 交叉编译器包(目前提供有点过时的 gcc 4.5.3)而不是直接使用这些,原因有两个:首先,我需要 GNU 工具箱中的其他东西,其次是因为包管理器。

我不确定 Pthreads-win32 在多大程度上符合 POSIX,但我可以确认 LLVM 和 Clang 都可以使用此设置进行编译。

于 2013-07-06T21:08:55.560 回答