2011-04-02 36 views
3

有誰知道爲什麼下面的代碼OpenMP的錯誤:「X」是預先確定的「共享」的「私人」

void foo(const int X) 
{ 
    #pragma omp parallel for private(X) 
    for (int i = 0; i < 100; i++) 
    { } 
} 

給出了這樣的錯誤

error: 'X' is predetermined 'shared' for 'private'

,我怎麼能真正讓X私人到每個線程?

+1

X已經是'const'了......你爲什麼要複製它? – pmg 2011-04-02 20:38:56

+0

@pmg:它恰好是我在做什麼時候的'const',但同樣的問題發生在非''contst'變量上......你如何解決這些問題? – Mehrdad 2011-04-02 20:47:50

+0

當X不是常量時,你確定會得到相同的錯誤嗎? – csgillespie 2011-04-02 21:33:23

回答

4

由於X是固定的,因此您會收到錯誤消息。只要刪除const,一切都應該工作。

+1

這不是一個很好的建議,只是爲了擺脫這個消息而不斷變成一個可變變量。解決方法是:刪除'private(X)'。那麼'X'將默認爲'shared'。既然'X'是一個常數,這是完全正確的,並且保存。 – 2013-12-05 15:25:15