Подтвердить что ты не робот

Безопасно ли для нескольких потоков вызывать одну и ту же функцию?

Безопасно ли, например, делать:

void AddTwo(int &num)
{
  num +=2;
}


void ThreadProc(lpvoid arg)
{
AddTwo((int)arg);

}

Было бы безопасно, если бы это произошло, если бы 4 потока выполняли это одновременно? Благодаря

4b9b3361

Ответ 1

Сама функция безопасна для вызова. Это становится опасным, если все пытаются работать с одной и той же переменной.

Ответ 2

Нет ничего плохого в вызове той же функции из разных потоков. Если вы хотите, чтобы ваши переменные были согласованными, рекомендуется обеспечить механизмы синхронизации потоков для предотвращения сбоев, условий распространения.

Ответ 3

Сейф зависит от значения lpvoid arg.

Если все аргументы друг друга отличаются друг от друга, тогда в противном случае это безопасно.

Чтобы сделать вызов функции безопасным, откройте "mutex".

Ответ 4

Как правило, функция возвращается, если она не изменяет общие ресурсы (например, такие же места в памяти). Если это так, вам нужно использовать какой-то механизм синхронизации, например, мьютексы или семафоры.

Ответ 5

Реальный ответ - это зависит...

На большинстве платформ, да, это безопасно, если вы не делаете ничего опасного в функции, о которой упоминали другие. Это легко повредить, поэтому будьте осторожны!

На других платформах это наиболее определенно небезопасно. Например, большинство компиляторов C для небольших микроконтроллеров PIC не могут поддерживать это из-за ограничений оборудования.

В общем, да, это безопасно, хотя.