что означает ограничение в pthread_create - PullRequest
2 голосов
/ 02 февраля 2012

Я смотрю на страницу руководства pthread_create.

int pthread_create(pthread_t *restrict thread,
          const pthread_attr_t *restrict attr,
          void *(*start_routine)(void*), void *restrict arg);

Что означает «ограничить» в этой сигнатуре функции? Какова цель этого?

Ответы [ 2 ]

1 голос
/ 02 февраля 2012

restrict устанавливает для вызывающей стороны требование, чтобы аргументы указателя на эту функцию не могли иметь псевдоним.То есть указатели не должны указывать на один и тот же объект.

Хотя это имеет очевидный смысл для pthread_create, это более важно для такой функции, как memcpy.

void * memcpy(void *restrict s1, const void *restrict s2, size_t n);

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

0 голосов
/ 02 февраля 2012

Это в значительной степени отвечает на ваш вопрос.

По сути, это говорит компилятору, что только этот указатель или производный от него указатель (pointer + 1) получит доступ к тому, на что указывает указательк.

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