2012-05-01 3 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

それは大丈夫です。 一部はクラス定義であり、もう1つは私が使用するコードの一部です。 フォーマットを整理してくれてありがとう、私は当時は不安でした。 –

+0

while部分には3 '{'がありますが、 '2 '}しかないので正しくはありません。 – rodrigo

答えて

0

'& thobjectsSimpleBarrierThread [I]' - この配列であり、その種類は何です。 '&'演算子はここでは非常に疑わしいと思われます...確かに、あなたが上の行でnew()を編集したため、ThobjectsSimpleBarrierThreadはすでにポインタ型です!

+0

最初のテストを行ったマーティンは実際にこの問題のようですが、私はもっと静かに見ていきます。 –

関連する問題