Возьмите следующий код, используя thread_local переменная в качестве примера:
void func() {
thread_local int a;
......
}
В соответствии с Википедия, Я знаю, что это thread_safety функция. Но мы должны также назвать это входящий угол функционировать?
Поток безопасности! = Повторный вход.
Функция повторного входа может быть прервана (скажем, обработчиком прерывания или сигнала), а затем повторно введена этим обработчиком сигнала; это происходит в одном потоке.
Мы не сможем сказать, func()
является реентерабельным или не только из-за того, что он использует одну локальную переменную потока.
Короче говоря: если функция обращается к глобальным данным неатомарным способом (или вызывает функцию, которая делает это), то она не реентерабельна. Это вовсе не обязательно связано с многопоточностью.
Других решений пока нет …