2012-02-02 42 views
2

我正在看pthread_create的手冊頁。pthread_create中的restrict是什麼意思

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

這個函數簽名中的'restrict'是什麼意思?它的目的是什麼?

+0

您是否檢查[this](http://en.wikipedia.org/wiki/Restrict)? – 2012-02-02 17:31:43

回答

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 2012-02-02 18:12:10

+0

是的,這是正確的。這兩個參數不應該指向同一個區域,也不應該從它們派生任何指針。 – 2012-02-02 20:22:52

+0

謝謝Jay,但是當我寫我自己的功能,並且使用'restrict'關鍵字時,這又有什麼關係呢?困惑。 – Whoami 2012-02-03 06:15:47

0

This幾乎可以解答你的問題。

它基本上告訴編譯器,只有這個指針或從它(指針+ 1)派生的指針才能訪問指針指向的內容。