2013-08-07 54 views
1

我將一個Linux應用程序移植到Windows。我觀察到需要在多線程部分完成許多更改。多線程Linux vs Windows

在Windows中,「pthread_t」(在Linux中)的等效結構是什麼?

在windows中,「pthread_attr_t」(在Linux中)的結構等價於什麼?

您可以在移植時指導我一些技巧。

謝謝...

+0

你試過Google嗎?周圍有很多指南。 – Sven

回答

0

以下是您的提示 - 「pthread是POSIX」。

Mingw有pthreads, Cygwin有pthreads等等。

我的建議是堅持mingw,儘量不要做任何改變。

+0

你的意思是......當我在「Mingw」或「Cygwin」上運行它時,我不需要更改代碼。目前正在使用code :: Blocks IDE .... – user2645956

+0

@ user2645956:AFAIK,MinGW不_包括pthreads,但有一個pthreads實現Windows的工作正常與MinGW(和VC + +,我認爲),並會讓你的生活太多更輕鬆。有關詳細信息,請參見[本FAQ](http://www.mingw.org/wiki/pthreads_library)。 – rodrigo

1

等效於pthread_t將是(通常情況下)在Windows上的HANDLE - 這是CreateThread返回的結果。

沒有直接等價的pthread_attr_t。相反,諸如堆棧大小之類的標誌的屬性,線程是否最初被掛起以及其他事情是通過參數傳遞給CreateThread

在我迄今爲止看到的情況下,圍繞pthreads編寫一個小包裝器,以便您可以有一個用於Windows的替代實現,這非常簡單。對我來說最令人煩惱的是,在Windows上,Mutex與Linux上不一樣:在Windows上,它是一個可以從多個進程訪問的句柄。 pthread庫稱爲互斥體的東西在Windows上被稱爲「臨界區」。這就是說,如果你發現自己找到的不僅僅是幾十行的包裝代碼,你可能需要看看C++ 11 thread librarythread support in Boost,以避免重新發明輪子(也可能錯誤地這樣做) )。