Области массива в потоках - PullRequest
1 голос
/ 11 февраля 2011

Как определяются массивы в C? Когда они когда-нибудь будут уничтожены? (Обратите внимание, также поговорим о том, могут ли они быть переданы даже в p_threads)

Ответы [ 3 ]

1 голос
/ 11 февраля 2011

Массивы ограничены, как и любой другой примитив, структура или объединение.Ничто никогда не уничтожается в C, хотя массивы могут выходить за рамки.

Также, как и другие типы, массивы можно размещать в куче, вызывая malloc(), чтобы выделить достаточно места для хранения желаемого числа.элементы, и обрабатывая возвращенный void * как указатель на первый элемент.Такой массив будет действителен до тех пор, пока вы не вызовете free().

WRT Pthreads, опять же, правила такие же, как и для любого другого типа.Если вы определите массив как автоматическую (function-scope) переменную, он выйдет из области видимости, как только функция вернется;Вы не можете безопасно передать указатель на такой массив другому потоку.Но если вы разместите массив в куче, то вы можете передать указатель на этот массив (на что угодно внутри массива) где угодно, включая другой поток.Конечно, вам все еще необходимо обеспечить потокобезопасный доступ к содержимому с использованием соответствующих механизмов синхронизации.

1 голос
/ 11 февраля 2011

Нет абсолютно никакой разницы в правилах определения объема и времени жизни между массивами и любыми другими именованными объектами на языке Си. То есть массивы не являются чем-то особенным, когда дело доходит до объема и срока службы. В этом отношении они ведут себя так же, как обычная int переменная.

1 голос
/ 11 февраля 2011

Они ограничены как обычные переменные:

// in a function
int arrayA[300];
{
    float arrayB[100];
    // arrayA and arrayB available here
}
// arrayB out of scope, inaccessible.
// arrayA still available.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...