2012-02-02 15 views
2

私はpthread_createのマニュアルページを見ています。pthread_createの意味は何ですか

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

この機能シグネチャの意味はなんですか?それの目的は何ですか?

+0

[this](http://en.wikipedia.org/wiki/Restrict)にチェックを入れましたか? –

答えて

1

restrictは、この関数へのポインタ引数がエイリアスできないという要件を呼び出し元に設定します。つまり、ポインターは同じオブジェクトを指してはいけません。

pthread_createの場合は明らかですが、memcpyのような機能にとっては重要です。

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

memcpyでは、入力バッファが重複していないことが必要です。これは通常、単純な順方向または逆方向の反復ループとして実装されます。したがって、バッファを実行すると、が重複すると、すでにコピーされたデータのコピーが終了する可能性があります。

+0

私の理解が正しいかどうか教えてください。最初の引数は、あるメモリ位置の範囲を、aからdのように示します。したがって、同じ関数の他の引数は、a〜dのいずれの位置も指してはいけませんか? memcpyに見られるように? – Whoami

+0

はい、正しいです。 2つの引数は同じ領域を指すべきではなく、ポインタはそれらから派生したものであってはなりません。 –

+0

ありがとう、ジェイ、しかし、私は自分の関数を書いて、 '制限'キーワードを使って、どのように重要ですか?混乱している。 – Whoami

0

Thisかなり多くのご質問にお答えします。

これは、基本的には、このポインタ、またはそれから派生したポインタ(pointer + 1)がポインタが指しているものにアクセスすることをコンパイラに伝えます。