我讀過,爲了保證線程安全,它的方便種子並行區域內的RNG
這樣的:Openmp for循環,種子隨機數發生器在哪裏?
int seedbase = 392872;
#pragma omp parallel
{
srand(omp_get_thread_id * seedbase);
#pragma omp for
....
}
但是,如果我的並行部分是另一種循環內?如果我有這樣的情況:
int seedbase = 392872;
for(int i=0; i<100; ++i)
{
#pragma omp parallel
{
srand(omp_get_thread_id * seedbase);
#pragma omp for
....
}
}
我應該在哪裏初始化我RNG
?
因此,您希望每次迭代都創建一組加入其末尾的線程? – StoryTeller
是的,因爲外部循環範圍可能非常小,所以,假設我有8個線程,如果我把它放在它之前,並且循環範圍是(0,3),那麼我不會讓所有線程都工作,而在這種情況下,因爲我的內循環肯定大於8,我相信我得到所有線程工作 –
相關:[從多個線程使用stdlib的rand()](http://stackoverflow.com/q/6161322/2402272)。 –