Как создать библиотеку, которая использует мьютексы, только если pthread связан?
m создание библиотеки C в Linux, которая имеет несколько функций, которые совместно работают с некоторыми глобальными данными. Чтобы эти функции были поточно-ориентированными, они должны использовать мьютексы в соответствующих точках кода.
В Linux, чтобы использовать pthreads в приложении, необходимо создать ссылку в соответствующей библиотеке,-lpthread, В случае моей библиотеки, однажды скомпилированной, яЯ хотел бы, чтобы он работал, как если бы пользователь решил использовать pthreads в своем приложении, а также если бы он нет.
В случае, когда разработчик не использует потоки в своем приложении, они не будут ссылаться на pthreads. Следовательно, я'Мне бы хотелось, чтобы моя скомпилированная библиотека не требовала этого, и, кроме того, использование мьютексов в однопоточном приложении требует ненужных накладных расходов (не говоря уже о том, что это глупо).
Есть ли какой-то способ написания кода (с расширениями GCC, если это необходимо), в котором определенный блок кода будет работать, только если определенные символы были связаны? Я'я знаю, что я могу использоватьdlopen () и друзья, но это само по себе потребует того, что яЯ пытаюсь избежать. Я представляю что япоиск должен существовать, так как несколько стандартных функций находятся в одной лодке и требуют, чтобы мьютексы были потокобезопасными (и они есть), но работают, даже если они не связаны с pthreads.
По этому вопросу я заметил, чтоFreeBSD»s popen () функция на линии 66 & 67 использует непереносной чек -isthreaded, чтобы определить, используются ли потоки или нет, и следует ли использовать мьютексы. Я сомневаюсь, что что-либо подобное стандартизировано в любом случае. Но более того, такой код можетскомпилировать и связать, если символы неT признал, что в Linux символы мьютекса не выигралидаже не присутствует, если pthread не связан.
Подводя итог: Как в Linux можно создать библиотеку, которая знает, когда также используются потоки, и, если это так, использует мьютексы, где это уместно, и не требует связывания с pthreads, если разработчик приложения специально не хочет использовать где-то многопоточность? "