2016-08-22 5 views
2

Если у вас есть функция из библиотеки f_func(), и вы знаете, что она не реентерабельная, как вы ее используете в потоковой среде (POSIX)? Вы не можете получить доступ к исходному коду библиотеки.Что касается реентерации в C

+5

Вам необходимо смоделировать его как общий ресурс и обернуть его в мьютексе (или аналогичном). –

+0

Can u plz просто немного подробнее plzzz –

+0

Какая часть нуждается в уточнении? «общий ресурс», «мьютекс», что-то еще? –

ответ

6

Вы можете обернуть его в мьютексе. Вот пример использования:

pthread_mutex_t f_func_mutex = PTHREAD_MUTEX_INITIALIZER; 

pthread_mutex_lock(&f_func_mutex); 

f_func(); 

// if f_func has "side effects", such as setting a global, you'll want to grab 
// the value within the locked region: 
int local = global_set_by_f_func; 

pthread_mutex_unlock(&f_func_mutex); 
+0

Ушел, спасибо, спасибо –

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