я могу выделить alloc () в главном потоке и free () в другом? - PullRequest
0 голосов
/ 27 ноября 2010

У меня есть программа, которая отлично работает на MacOS и Linux и кросс-компилируется в Windows с помощью mingw.Недавно я сделал программу многопоточной.

В текущем проекте программы память выделена в главном потоке и освобождена в подчиненных «рабочих» потоках.Это не проблема для MacOS и Linux, потому что система malloc / free является многопоточной.

Однако я беспокоюсь о кросс-компиляции.Версия mingw, которую я использую, построена из портов MacOS.Это довольно древняя версия G ++ (версия 3.4.5) 2004 года. Я безуспешно пытался создать более свежую версию (я хотел бы создать 64-разрядную версию, но отказался).Я получаю pthreads от http://sourceware.org/pthreads-win32.

Меня беспокоит то, что система malloc & free в 3.4.5 не является многопоточной.

Вопросы:

  1. Должен ли я переписать свою программу так, чтобы освободившиеся блоки памяти были переданы обратно в главный поток, который должен быть там освобожден?

  2. Стоит ли пытаться обновитьк более поздней версии Mingw?

  3. Есть ли способ найти эти проблемы параллелизма, кроме огромного количества тестирования?Мне это просто не нравится.

Спасибо!

Ответы [ 2 ]

1 голос
/ 13 января 2011

Почему вы говорите, что malloc & free не являются многопоточными?

mingw32 по умолчанию будет связываться с msvcrt.dll, который является многопоточным dll. Смотри [1]. была [2] однопоточной библиотекой, предоставленной Microsoft, но она была доступна только для статического связывания.

PS: Вы упоминаете, что вы кросс-компилируете, но вместо этого вы, кажется, компилируете программу Windows в Windows. В таком случае, почему бы вам не загрузить двоичные файлы с www.mingw.org? (хотя в их загрузках сложно найти нужные файлы)

1- http://msdn.microsoft.com/en-us/library/abx4dbyh%28v=VS.71%29.aspx

2- См. [1]. Удалено в Visual Studio 2005 http: // msdn.microsoft.com/en-us/library/abx4dbyh%28v=VS.80%29.aspx

1 голос
/ 27 ноября 2010
  1. Я бы этого избежал.Похоже, вы пытаетесь уклониться от основной проблемы.
  2. Да, это было бы хорошей идеей в любом случае ...
  3. Один из способов обнаружения проблем параллелизма, связанных с выделением памяти /освобождение - это детектор утечки памяти.Я не уверен, что Valgrind работает на Cygwin.
...