c - Windows 中的高级 C 编程(pthreads、信号和信号量,天哪!)

标签 c windows multithreading operating-system posix

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

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

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

无论如何,如果有人能给我一份他们会推荐的选项列表(最好不要坚持使用您的 VM,即使我认为这可能是我最好的选择),也许还有一些技巧、优点、缺点,也许是安装指南,或者这些选项的任何非空子集,我真的很感激。另外,在你问之前,我们必须在作业中使用 C 和上面提到的编程功能,所以不幸的是没有切换到 Java 或 win32 中的代码选项:(

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

最佳答案

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

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

就我个人而言,我喜欢 POSIX API 并且热爱 Linux。但我很感激,如果您想在 Windows 中正确地做事,您应该使用 Windows 操作系统 API - 尽管结果和方法可能有些不同,但他们已经仔细考虑过这一点。

PS Windows 没有“警报”。这可能是将 Unix/Linux 实用程序简单地移植到 Windows 的唯一最令人望而却步的障碍。 (这一点以及 Windows 进程在使用之前必须“引导”Internet/套接字支持这一事实,而 Linux 进程则很好)。

关于c - Windows 中的高级 C 编程(pthreads、信号和信号量,天哪!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17505608/

相关文章:

c - C中的字符串交换

c - 为什么我的链表内容在退出函数后就消失了?

c++ - 基于双向链表的双端队列实现不起作用

windows - 如何使两个批处理文件变量回显成一行?

php - php 中是否有类似 Java 的线程概念?

c - 取消索引 Collada

c++ - Qt - 如何编译特定的插件/组件

c++ - Boost - shared_mutex 必须是同一个实例吗?

java - 使用 Spring Hibernate 在 Java 中处理并发

c++ - 在 Windows 下处理多个客户端连接的最佳方法(不使用线程)?