the ISO C standard to be a modifiable lvalue of type int, and must not be explicitly declared; errno may be a macro. errno is thread-local; setting it in one thread does not affect its value in any other thread
мне интересна строчка, где говорится что errno is thread-local. для меня это поведение кажется каким-то невероятным, есть ли в нем какие-то подводные камни?
если я создам два потока, которые по очередно будут некорректно вызывать функции, который в ответ на это будут писать в errno разные ошибки, я вообще могу не париться об этом и errno каждый раз будет корректным?
Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!
Всё ещё неправильно :( Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!
А что в нем невероятного?
не знал, про механизм, что у каждого потока своя errno и не представлял как он так работает под капотом :) спасибо
Раньше было не так
Почитать (и перечитать в будущем еще пару раз - уже с пониманием): https://chao-tic.github.io/blog/2018/12/25/tls
Нет подводных камней. Ранее CRT была не thread safe и имела глобальные переменные, теперь это всё thread local
Обсуждают сегодня