Как управлять памятью в многопоточном приложении на WIN API?

Рейтинг: 1Ответов: 1Опубликовано: 02.04.2015

Собственно есть приложение на Си, в нем используются такие нехорошие вещи как malloc, realloc, memset. Все работает хорошо до тех пор пока не запускается поток, после этого программа крешится. Поток создается через CreateThread, я не хочу использовать CLR в коде. Вопрос как управлять памятью используя чисто Си функции и Win API ?

UPD Поток крешиться из за использования функций работы с памятью стандартной библиотеки Си, повреждается куча, эксепшн в функции _heap_alloc();

Создание потока

ThreadID = CreateThread(0, NULL,
(LPTHREAD_START_ROUTINE)&ThreadFunction, 
&DataForThreadFunction, 0, &ThreadIdentifier);

DataForThreadFunction - выделенна через malloc. Она нигде не освобождается. Внутри ThreadFunction нет выделения памяти или освобождения памяти. Без запуска потока приложение не падает. Память не течет.

Ответы

▲ 2

@iDarkLord, Вы пишете

Я везде вызываю не thread-safe функции в этом то как бы и проблема)). Вопрос в том чем их заменить.

Их надо не заменять, а обрамлять мьютексами. Т.е. вызовы одной и той же не thread-safe функции из разных потоков должны разделяться по времени. Если разные функции вызывают внутри одну и ту же тоже не tread-safe функцию, то доступ к ним должен разграничиваться одинаковым мьютексом.

Я понимаю, что в общем случае узнать это невозможно, поэтому для надежности вызовы всех "ненадежных" функций придется разделять.