Ответ 1
Сама функция безопасна для вызова. Это становится опасным, если все пытаются работать с одной и той же переменной.
Безопасно ли, например, делать:
void AddTwo(int &num)
{
num +=2;
}
void ThreadProc(lpvoid arg)
{
AddTwo((int)arg);
}
Было бы безопасно, если бы это произошло, если бы 4 потока выполняли это одновременно? Благодаря
Сама функция безопасна для вызова. Это становится опасным, если все пытаются работать с одной и той же переменной.
Нет ничего плохого в вызове той же функции из разных потоков. Если вы хотите, чтобы ваши переменные были согласованными, рекомендуется обеспечить механизмы синхронизации потоков для предотвращения сбоев, условий распространения.
Сейф зависит от значения lpvoid arg.
Если все аргументы друг друга отличаются друг от друга, тогда в противном случае это безопасно.
Чтобы сделать вызов функции безопасным, откройте "mutex".
Как правило, функция возвращается, если она не изменяет общие ресурсы (например, такие же места в памяти). Если это так, вам нужно использовать какой-то механизм синхронизации, например, мьютексы или семафоры.
Реальный ответ - это зависит...
На большинстве платформ, да, это безопасно, если вы не делаете ничего опасного в функции, о которой упоминали другие. Это легко повредить, поэтому будьте осторожны!
На других платформах это наиболее определенно небезопасно. Например, большинство компиляторов C для небольших микроконтроллеров PIC не могут поддерживать это из-за ограничений оборудования.
В общем, да, это безопасно, хотя.