2010-05-09 4 views
11

Я использую pthreads-win32, чтобы разрешить поддержку потоков для окон.Переносимость pthreads-win32 по различным компиляторам окон

У меня есть проект кросс-платформы, который использует pthreads, и я хочу заставить его работать с окнами с различными компиляторами и разными версиями ОС.

По крайней мере, согласно документации, pthreads-win32 должен работать с MSVC и даже Сборка MSVC.

Но я не знаю, протестирована ли библиотека с последними компиляторами MSVC, такими как MSVC-2008 и , если она поддерживается под 64-битными окнами.

От Ваш собственный опыт Вы знаете какие-либо проблемы с этой библиотекой?

  • Любые проблемы с MSVC8, MSVC9, MSVC10?
  • Любые проблемы с Windows x86_64?
  • Любые проблемы с Windows Vista/Windows 7?

Примечания:

  • Даже не пытайтесь рекомендовать использование Boost.Thread, я не заинтересован в И я знаком с библиотекой Boost.Thread
  • Я. не заинтересованы в том, чтобы изобретать колесо с API Win32 (в котором отсутствуют RW-Locks, условные переменные и т. д.).
  • Мне удалось скомпилировать проекты с MSVC-2008 и MinGW GCC-4.3, а затем легко запустить на нем модульные тесты, используя текущую предварительно скомпилированную DLL pthreads.

Мне просто нужно знать ограничения pthreads-win32.

+0

От ** переносной ** вы имеете в виду только между версиями Windows? Если это так, я буду придерживаться API-интерфейса kernel32. Или существует сильное преимущество использования pthread-win32? – jweyrich

+0

@jweyrich. Я имею в виду, что могу использовать его с последними MSVC-2008 & | Windows7 & | x86_64. И нет, использование Win32 API не является опцией (никаких указателей, специфичных для потока, без RW-Locks, без условных переменных и т. Д.) – Artyom

ответ

8

Ну, paxdiablo, по-видимому, суммировал его здесь. Но из моего прошлого опыта работы с этой библиотекой я могу добавить пару вещей здесь.

Во-первых, я использовал подмножество функций библиотеки с MSVC 2008 без каких-либо проблем.

Во-вторых, некоторые из моих коллег получили его на x86_64 (с MSVC2008 и MinGW). Они не сталкивались с какой-либо проблемой ни после многих циклов тестирования бета-тестирования и тестирования QA. Хотя я сам не тестировал его, поэтому не могу быть уверенным в этом.

Таким образом, при взгляде на вещи оно может быть пригодным для использования. Единственное предостережение здесь в том, что если вы обнаружите какую-либо проблему, вы окажетесь во власти не очень активного списка рассылки (или, возможно, вы захотите, чтобы ваши руки были грязными с исходным кодом или что-то в этом роде).

+0

Спасибо, это было именно то, что я хотел знать. – Artyom

2

Невозможно сказать наверняка, и это может быть не то, что вы хотите услышать, но, учитывая, что последний выпуск датирован 2006, я бы очень осторожно использовал это в последних компиляторах. Это может работать, но это, вероятно, будет зависеть от вас, чтобы это произошло. Там, кажется, много дискуссий о том, чтобы заставить его работать в Cygwin и MinGW, но очень мало для MSVC, а ничего Я могу найти за пределами MSVC2005.

Кроме того, если вы изучите архивы CVS, в прошлом году было исправлено несколько незначительных файлов (большинство из них два-пять лет назад). Пары, датированные менее года назад, имеют описание «Комментарии и изменения стиля кода», что заставляет меня думать, что ни одно из мяса продукта не находилось в активном развитии какое-то время.

Теперь, может быть, я ошибаюсь, и это просто невероятно хорошо написанный, стабильный продукт, но моя внутренняя природа с большей вероятностью завершит его одним из базой хороших идей, которые прошли на обочине.

И, взглянув на списки рассылки, в течение первых пяти месяцев 2010 года было опубликовано всего семь сообщений (самый ранний из которых был без ответа в течение четырех месяцев) и всего 59 на весь 2009 год. Цвет меня скептически, но это не похоже на массовое сообщество поддержки.

Там, кажется, патч для 64-разрядной ОС Windows (см here в 2010 архивах), но, опять-таки, это, кажется, есть проблемы, которые без ответа с февраля и в нем упоминается только поддержка MinGW:

... этот патч (немного грубый и нуждается в некоторой окончательной очистке и некотором расширении к make-файлу тестового запуска для разрешения CROSS здесь) позволяет строить pthread для цели x86_64-pc-mingw32.

Это не вид вещи, я бы использовать для моего критически важного программного обеспечения.

И я знаю, что вы заявили, что вам не интересно заново изобретать колесо, но вы можете легко реализовать блокировки и переменные с несколькими считывателями из более простых примитивов - у меня даже была схема множественного чтения, которая была решена проблемы с голодной записью таким образом, что я получил патент (не согласен с патентами на программное обеспечение, но мой работодатель настаивает на том, что они ценны).

И если только колеса у вас есть имеет половину своих спиц недостающие и ужасно изогнутую форму, вы можете просто нужно пересмотреть :-)

В любом случае, Vista и Server2k8 введены как condition variables и slim reader/writer locks. Thread-local storage существует со времен Win2k. Я знаю, что это не поможет, если вам все еще нужно поддерживать XP, но я буду смотреть в будущее.

И поскольку вы, кажется, определили переносимость как «только для Windows», и все функции, которые вы хотите, доступны в текущих версиях, я не уверен, что вижу преимущество в том, чтобы придерживаться pthreads. Если вам нужна переносимость POSIX, да, но это, похоже, не так.

+0

Немногие точки: я скомпилировал свой проект с версией pthreads MSVC, выполнил модульные тесты и работает ...(MSVC 2008). Поэтому я предполагаю, что он хорошо отлажен, поддерживается и существует уже много лет. (заметьте, я не скомпилировал его, а использовал предварительно скомпилированные двоичные файлы для MSVC). О TLS - Windows TLS API даже не позволяет вам предоставлять деструктор для указателя TLS ... Вам нужно написать довольно сложные вещи, чтобы заставить его работать. Также, имея критические разделы/условные переменные, вам все равно придется работать с рекурсивными/нерекурсивными блокировками. С pthread это метр простого флага. – Artyom

+0

Примечание: Мне нужны pthreads, потому что это портативный проект, а Windows - одна из платформ, которые она хотела бы поддержать. Мне нужно знать ограничения библиотеки pthreads, чтобы узнать, что будет работать, а что нет. – Artyom

+0

Я, очевидно, неправильно понял ваши требования к переносимости - казалось, не включал платформы, отличные от Windows. Тогда мое предложение состоит в том, что вы получите более целенаправленный ответ, разместив на досках объявлений сам продукт, так как вы получили небольшой отклик здесь в течение двух дней, и мы обычно довольно разговорчивы и упрямы, готовы позволить вам знайте, что мы думаем, очень мало подсказывая :-) Но, учитывая активность на их борту, вам, возможно, придется немного подождать. Если у вас все получится, тогда вы больше всего на пути. Я все равно буду заботиться о поддержке, но это зависит от вашей ситуации. – paxdiablo

0

Удивлен, что никто не предлагал Блоки развития темы Intel. Они очень активны и поддерживают практически все, причем самый новый релиз составляет менее двух недель назад и функции C++ 0x, если вы используете совместимый компилятор.

http://software.intel.com/en-us/intel-tbb/#sysreq

+3

Это с открытым исходным кодом? AFAIK нет. Поэтому меня это не интересует. 2nd Меня не интересуют другие библиотеки. Мне нужно понять ограничения pthreads-win32 – Artyom

Смежные вопросы