2

Предположим, что я имею следующую функцию CЕсть ли вероятность повреждения памяти или отказа сегмента?

void *AllocateMemory(int numBytes) 
{ 

    //allocate "numBytes" of memory 

    //return the memory address 
} 

если выше функция доступна так много говорят, как процесс 100 паралельно, есть ли возможность повреждения памяти или неисправности сегмента?

Примечание: Окружающая среда является многопоточным.

+0

Это очень зависит от реализации этой функции. Если он использует правильную блокировку, то все в порядке. 'malloc (3)' блокирует свои структуры для каждого вызова. –

+0

нет блокировки ... просто равное распределение – CoolToshi45

+2

Как выполняется выделение? Я не могу сказать вам, является ли ваша функция потокобезопасной без исходного кода. –

ответ

2

Не путайте процессы и нити.

С процессами ничего не может произойти вообще.

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

+0

Ty для ответа. Да, распределение прямо. т.е. недействительным * allocateMem() { // выделить Mem // Нет Запирание-Шокирующие УИС там между // RETUEN Mem } Тем не менее я comfused как ком уверить себя, что не будет никакого cprruption ??? – CoolToshi45

+0

Просто ** КАК ** Вы выделяете память? Вызов malloc()? – Medinoc

+0

OKAI LET SAY LIKE thIS: void * AllocateMem (int numBytes) {return (malloc (numBytes)); } Если эта функция активирована как 100 или 1000 процессов, которые жаждут памяти, что произойдет? Есть ли вероятность повреждения памяти или сбоя сегмента? – CoolToshi45

1

Все процессы имеют собственное адресное пространство, поэтому несколько процессов не являются проблемой.

Для резьбовых соединений ответ заключается в том, что это зависит от вашей реализации malloc().

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

Is malloc thread-safe?