Что лучше для окон? pthreads или CreateMutex?

Я переношу свое приложение на Windows из Linux. Я новичок в тонком искусстве переноса приложений на разные платформы. Насколько я знаю, Windows изначально не поддерживает реализацию потоков POSIX. Это правда? Я слышал о некоторой реализации pthreads для окон (обертка или что-то в этом роде), было бы лучше использовать их или использовать CreateMutex и другие API, предоставляемые окнами???? Кто-нибудь пожалуйста. просветите меня с плюсами и минусами обоих миров. Некоторые разные советы по переносу хорошо сочетаются с ответом.

Заранее спасибо.


person puffadder    schedule 10.07.2009    source источник


Ответы (6)


Одна вещь, которую вы должны иметь в виду, — это будущее этого кода. Планируете ли вы разработку (и выпуск) на обеих платформах в будущем? Или это односторонний порт?

Лучшее, что можно сделать при переносе проекта, — это свести фактические изменения кода к минимуму. В вашем случае это будет означать использование решения pthread. При этом, если вы планируете, что это будет односторонний порт, переход на родной никогда не повредит. :)

Я бы потратил некоторое время, чтобы полностью изучить обе стратегии, а затем реализовать ту, которая вам наиболее удобна.

person Craig    schedule 10.07.2009

Это все будет одно и то же (pthreads просто вызовет EnterCriticalSection и т. д.), поэтому, если у вас есть оболочка pthreads, вам, вероятно, следует использовать ее, чтобы вам не пришлось менять столько кода.

person Ana Betts    schedule 10.07.2009

это хорошо работает: http://sourceware.org/pthreads-win32/

Это порт библиотеки pthreads для Windows.

person Community    schedule 15.07.2009
comment
Я добавлю свои 2 цента, что нам также очень повезло с этой библиотекой. Довольно сложное приложение с большим количеством семафоров, очередей и рекламы было перенесено с VxWorks на POSIX и, наконец, на Windows. - person Chris Arguin; 15.07.2009

Первое, что я бы сделал, это портировать на Boost Thread под Linux, чем на Windows.

person Shing Yip    schedule 10.07.2009
comment
В дальнейшем Boost Threads, на котором основана следующая стандартная библиотека потоков, будет рекомендуемым способом выполнения потоков в кросс-платформенном C++. POSIX thread API и сырой Win32 threading API не совсем взаимозаменяемы. Переменная условия, например, доступна в POSIX, но не на всех платформах Win32. Если вы собираетесь полагаться на библиотеку, например, на оболочку POSIX/Win32, вы рискуете не знать качества библиотеки и не сможете получить много помощи. Boost с другой стороны, вы обязательно найдете много помощи, когда столкнетесь с проблемами. - person Shing Yip; 10.07.2009
comment
Спасибо. Это была помощь. Это доступно для C? - person puffadder; 11.07.2009

Почему бы не взять лучшее из обоих миров и не использовать библиотеку, обертывающую как pthreads, так и API Windows, и использовать подходящую под обложкой? Ваш код остается одинаковым на обеих платформах.

В C++ нет недостатка в таких библиотеках, поэтому я не могу себе представить, что нет версий C.

person Duck    schedule 10.07.2009
comment
APR (Apache Portable Runtime) — фантастическая кроссплатформенная библиотека C, которая делает это. Настоятельно рекомендуется, так как он хорошо протестирован и довольно популярен. - person Clay; 15.07.2009

В приложениях Windows C/C++, использующих CRT, необходимо вызвать beginthread/beginthreadex для правильной инициализации CRT в новом потоке.

person Remus Rusanu    schedule 10.07.2009