我想知道igraph_rng_default()是否給出了一個線程安全的隨機數生成器,如果是這樣的話,我應該使用什麼樣的rng?此外,如果您在每個線程中調用igraph_sbm_game,那麼這些圖的生成是線程安全的?Igraph隨機數發生器在c
編輯: 更清楚,這是我在我的節目中寫道:
#define N 2048
#define R 16
#define rngseed 1763984
int main(void)
{
igraph_rng_seed(igraph_rng_default(), rngseed);
#pragma omp parallel shared(some_shared_variables) private(some_private_variables)
{
igraph_matrix_t pref_matrix;
igraph_matrix_init(&pref_matrix, R, R);
igraph_vector_int_t block_sizes;
/*SBM initialization*/
igraph_vector_int_init(&block_sizes, R);
...
...
#pragma omp for ordered schedule(static,1)//ordered schedule(static,1) per risultati in ordine #pragma omp ordered per stampare in ordine
for(q1=0;q1<100;q1++)
{
igraph graph;
igraph_sbm_game(&graph, N, &pref_matrix, &block_sizes, IGRAPH_DIRECTED, IGRAPH_NO_LOOPS);
....
}
}
我的問題是,既然igraph_sbm_game基於所選擇的RNG隨機圖,這是隨機性保證線程安全?換句話說,使用默認的igraph隨機數生成器,我可以通過線程安全的方式獲得隨機數嗎?我懷疑來自igraph_sbm_game()函數不需要種子和我無法找到igraph使用哪個隨機數生成器的事實...
我認爲你應該詳細說明這個問題。線程安全隨機數發生器是什麼意思?你試過了,發現了一些問題?另見[問]。 –
即使它是線程安全的,爲每個線程使用單獨的RNG可能會更好,因爲那樣就沒有機會競爭默認的RNG。 –
如何在不同的線程中調用單獨的rngs? –