2012-05-01 52 views
0

我的問題是關於創建對象時傳入的值。 進行調試時,很明顯'id','cont','size'和'nthreads'的值會以某種方式丟失。 我搜索了互聯網,發現鏈接https://stackoverflow.com/questions/1151582教學如何傳遞一個對象,並讓一個方法叫他。 它一直運行,直到方法'run()',其中創建對象時傳遞的值丟失。 我不知道我是否需要弄亂靜態類型,以便它不會,但是,我不知道該怎麼做。使用線程創建丟失對象時傳入的參數值

class Section1SimpleBarrierThread { 

Section1SimpleBarrierThread(int id, Section1Counter* cont, int size, int nthreads) { 
     this->id = id; 
     this->cont = cont; 
     this->size = size; 
     this->nthreads = nthreads; 
    } 

    void* run(void){ 
    pthread_mutex_lock(&mutex); 
    for(int i=0; i<size; i++) { 
     cont->shared_cont++; 
     if(cont->shared_cont != this->nthreads) { 
     //cont.wait(); 
     } else { 
      //cont->shared_cont = 0; 
      // cont.notifyAll(); 
     } 
    } 
    pthread_mutex_unlock(&mutex); 
    } 

    static void* run_helper(void* context){ 
    return ((Section1SimpleBarrierThread*)context)->run(); 
    } 
}; 

while ((time < TARGETTIME) && (size < MAXSIZE)){  
j->resetTimer("Section1:Barrier:Simple"); j->startTimer("Section1:Barrier:Simple"); 

for(int i=0; i<nthreads; i++) { 
thobjectsSimpleBarrierThread[i]= new Section1SimpleBarrierThread(i,cont,size,nthreads); 
pthread_create(&thread_id[i],NULL,&Section1SimpleBarrierThread::run_helper,&thobjectsSimpleBarrierThread[i]); 

for(int i=0; i<nthreads; i++) { 
     pthread_join(thread_id[i],NULL); 
    } 
} 
+0

也許你弄糟了大括號,也許是我重新格式化文本時的原因。無論如何,你應該仔細檢查他們...... – rodrigo

+0

沒關係。 一部分是類定義,另一部分是我使用它的代碼的一部分。 感謝您整理格式,我在當時摸索。 –

+0

它不可能是正確的,因爲while部分有3個'{'但只有2'}'。 – rodrigo

回答

0

'& thobjectsSimpleBarrierThread [I]' - ,其中是該陣列中,並且什麼是它的類型。 '&'這個操作符在這裏看起來很可疑...當然thobjectsSimpleBarrierThread已經是一個指針類型,因爲你new()在上面一行代碼了!

+0

馬丁,現在做了最初的測試,實際上似乎是這個問題,我會更冷靜地看。 –