我是第三年学习计算机科学,所以我应该已经知道这个问题的答案了,但是我没有。无论如何,我目前正在攻读我的学位课程,我们已经在C语言中涵盖了许多新的编程概念,如信号,信号量和线程。不幸的是,我的教授在Linux / OS中涵盖了所有这些X透视。这对我来说意味着,在64位Windows机器上,安装警报信号,或使用信号量和pthreads等东西都无法在我的机器上编译或运行(据我所知)。
无论如何,目前我刚刚在运行Linux的VM中完成了我的任务,到目前为止它运行良好,但我更喜欢Windows环境进行编码。
所以,在那个沉重的介绍之后,我的问题是,正如你可能已经猜到的那样,是否有一种方法可以编码所有这些功能(报警信号,信号量,pthread等)并能够编译和测试他们在Windows?我完全清楚Windows操作系统不支持报警信号并且POSIX功能有限,但我听说有关cygwin(我确实试图开始工作,但不是很努力:P)和微信的谣言您可以在后台运行以使用这些功能的Linux内核。
无论如何,如果有人可以给我一个他们会推荐的选项列表(最好不要坚持你的VM,即使我认为这可能是我最好的选择),也许一些提示,优点,缺点,也许是设置指南,或者这些选项的任何非空子集我都会非常感激。另外,在你提问之前,我们必须在我们的作业中使用C和上面提到的编程功能,所以不幸的是,在win32选项中没有切换到Java或代码:(
提前感谢任何能够提供一些智慧之词的人:)
答案 0 :(得分:3)
基本原则在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进程很好)。
答案 1 :(得分:1)
有MinGW-w64 - GNU工具链的Windows端口 - 和Pthreads-win32,Windows线程API的POSIX包装器。
我通过mingw64-x86_64
Cygwin交叉编译器包(目前提供有点过时的gcc 4.5.3)而不是直接使用这些包含两个原因:首先,我需要GNU工具箱中的其他东西,第二,因为包经理。
我不确定Pthreads-win32符合POSIX的程度,但我可以确认LLVM和Clang都使用此设置进行编译。