Поскольку все вызовы malloc () будут проходить через ваш хук, вы можете синхронизироваться с семафором (подождите, пока он освободится, заблокируйте его, манипулируйте хуками и освободите семафор).
[РЕДАКТИРОВАТЬ] IANAL, но ... Если вы можете использовать glibc в своем коде, тогда вы можете посмотреть на код (поскольку это LGPL, любой, кто его использует , должен быть разрешенным иметь копию источника). Поэтому я не уверен, что вы правильно поняли правовую ситуацию или, возможно, вам не разрешено юридически использовать glibc вашей компанией.
[EDIT2] Подумав, я думаю, что эта часть пути вызова должна быть защищена некоторой блокировкой, которую glibc создает для вас. В противном случае использование хуков в многопоточном коде никогда не будет надежно работать, и я уверен, что в документах об этом будет сказано. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * '' * '' '100 * *' должно быть безопасным для нитей, крючки также должны быть.
Если вы все еще беспокоитесь, я предлагаю написать небольшую тестовую программу с двумя потоками, которые выделяют и освобождают память в цикле. Увеличьте счетчик на крючке. После миллиона раундов счетчик должен быть ровно два миллиона. Если это так, то хук защищен также замком malloc()
.
[EDIT3] Если тест не пройден, то из-за вашей правовой ситуации невозможно внедрить монитор. Скажите своему боссу, и пусть он примет решение об этом.
[EDIT4] Googling включил этот комментарий из сообщения об ошибке:
Крючки не безопасны для нитей. Период. Что вы пытаетесь исправить?
Это часть обсуждения в марте 2009 года об ошибке в libc/malloc/malloc.c
, которая содержит исправление. Так что, возможно, версия glibc после этой даты работает, но, похоже, гарантии нет. Это также зависит от вашей версии GCC.