【问题标题】:Multithreading Linux vs Windows多线程 Linux 与 Windows
【发布时间】:2013-08-07 06:56:43
【问题描述】:

我正在将一个 Linux 应用程序移植到 Windows。我观察到需要在多线程部分进行许多更改。

Windows 中“pthread_t”(在 Linux 中)的等效结构是什么?

在 Windows 中,“pthread_attr_t”(在 Linux 中)的结构等效于什么?

您能否在移植时指导我一些提示。

谢谢...

【问题讨论】:

  • 你试过谷歌搜索吗?周围有很多指南。

标签: linux windows multithreading porting


【解决方案1】:

在 Windows 上,pthread_t 的等价物将是(通常情况下)HANDLE - 这是CreateThread 返回的内容。

没有直接等同于pthread_attr_t。相反,一个标志的属性,如堆栈大小、线程是否最初被挂起以及其他东西通过参数传递给CreateThread

在我目前看到的案例中,围绕 pthread 编写一个小包装器以便您可以为 Windows 提供替代实现非常简单。最让我恼火的是,在 Windows 上,Mutex 与 Linux 上的不同:在 Windows 上,它是一个可以从多个进程访问的句柄。 pthread 库调用 mutex 的东西在 Windows 上称为“临界区”。

话虽如此,如果您发现自己发现的包装代码不止几十行,您可能需要查看 c++11 thread librarythread support in Boost 以避免重新发明轮子(以及可能是错误的)。

【讨论】:

    【解决方案2】:

    这是您的提示 - “pthread 是 POSIX”。

    Mingw 有 pthreads, Cygwin 有 pthreads 等等。

    我的建议是坚持使用 mingw,尽量不要做任何更改。

    【讨论】:

    • 你的意思是......当我在 "Mingw" 或 "Cygwin" 上运行它时,我不需要更改代码。目前正在使用 code::Blocks IDE....
    • @user2645956: AFAIK,MinGW not 包含 pthreads,但是有一个适用于 Windows 的 pthreads 实现可以与 MinGW(和 VC++,我认为)一起工作,并且会让你的生活更轻松。详情请见this FAQ
    猜你喜欢
    • 1970-01-01
    • 2017-04-04
    • 2018-02-06
    • 2013-06-29
    • 1970-01-01
    • 2011-03-09
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多