私の質問は、オブジェクトの作成時に渡される値に関するものです。 デバッグを行うと、 '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);
}
}
多分あなたは中括弧を台無しにしているかもしれませんが、たぶんそれは私がテキストを再フォーマットしたときの私でした。とにかく、それらを再確認する必要があります... – rodrigo
それは大丈夫です。 一部はクラス定義であり、もう1つは私が使用するコードの一部です。 フォーマットを整理してくれてありがとう、私は当時は不安でした。 –
while部分には3 '{'がありますが、 '2 '}しかないので正しくはありません。 – rodrigo