-1

私の質問は、オブジェクトを作成するときに渡される値に関するものです。デバッグを行うと、「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);
    }
}
4

1 に答える 1

0

'&thobjectsSimpleBarrierThread [i]'-この配列はどこにあり、その型は何ですか。ここでの「&」演算子は非常に疑わしいように見えます...確かにthobjectsSimpleBarrierThreadは、上の行でnew()したので、すでにポインタ型です!

于 2012-05-01T20:28:06.000 に答える