2017-02-12 55 views
0

即使我沒有太多的理解,我仍然對編程有點新,所以很抱歉。即時嘗試製作一個二維數組的互斥鎖與我正在使用的另一個二維數組對應。這是我的代碼如何製作一個二維數組互斥鎖?

#define NUM_THREADS 100 

static pthread_mutex_t mutexes[NUM_THREADS][NUM_THREADS] = { 
    for(int i = 0 ; i < NUM_THREADS ; i++) { 
    P99_DUPL(NUM_THREADS, PTHREAD_MUTEX_INITIALIZER); 
    } 
}; 

我是否正確地做了這件事?是否有可能做這件事?

編輯:當我嘗試編譯時,出現錯誤「預期表達式」。

+0

是否有可能具有n×m個互斥爲在陣列中的東西?是的,但可能不明智。它可以通過這種方式初始化嗎?不在C/C++中(除非某些新版本引入某種列表理解)。另外,除非你的目標機器擁有100個內核/線程,否則運行這麼多線程是沒有意義的。線程池大小的一個很好的啓發是n + ln(n),其中n是可用CPU核心/線程的數量。 – datenwolf

+0

感謝您的提示,我會盡力迴避並提出不同的策略。 –

回答

0

您無法使用for循環來定義和初始化2D陣列。既然你處理了一個非常大的數組(100×100),最好的辦法可能是分離定義和初始化。

對於2D整數陣列這將是:

int i, j; 
#define ARRAY_SIZE 100 
int my_array[ARRAY_SIZE][ARRAY_SIZE]; // Define the variable 

for (i=0; i<ARRAY_SIZE; ++i)   // Initialize the variable 
{ 
    for (j=0; j<ARRAY_SIZE; ++j) 
    { 
     my_array[i][j] = i * j; 
    } 
} 
+0

非常感謝,這不完全是我需要的,但它幫助我弄清楚我需要做什麼! –