int pthread_create(pthread_t *restrict thread,
const pthread_attr_t *restrict attr,
void *(*start_routine)(void*), void *restrict arg);
制限の意味を知りたいです。
ベストアンサー1
これは C99 で導入されたもので、渡されたポインターが引数内の他のポインターと同じ場所を指していないことをコンパイラーに知らせます。このヒントをコンパイラーに与えると、コードを壊すことなく、より積極的な最適化を行うことができます。
例として、次の関数を考えてみましょう。
int add(int *a, int *b) {
return *a + *b;
}
明らかに、ポインタから 2 つの数値を追加します。必要に応じて、次のように使用できます。
// includes excluded for brevity
int main(int argc, char **argv) {
int number=4;
printf("%d\n", add(&number, &number));
return 0;
}
明らかに、出力は 8 になります。これは、自分自身に 4 を加算しているからです。ただし、次のようrestrict
に加算すると:add
int add(int *restrict a, int *restrict b) {
return *a + *b;
}
すると、前のものmain
は無効になり、両方の引数として渡されます&number
。ただし、異なる場所を指す 2 つのポインターを渡すことはできます。
int main(int argc, char **argv) {
int numberA=4;
int numberB=4;
printf("%d\n", add(&numberA, &numberB));
return 0;
}