我的問題是關於創建對象時傳入的值。 進行調試時,很明顯'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
沒關係。 一部分是類定義,另一部分是我使用它的代碼的一部分。 感謝您整理格式,我在當時摸索。 –
它不可能是正確的,因爲while部分有3個'{'但只有2'}'。 – rodrigo