Я выполняю поток для планировщика и вставляю процессы в очередь планировщика в основном потоке, пока поток планировщика все еще выполняется.По какой-то причине переменные объекта процесса изменяются, когда сам объект передается в ReadyQueue.Например, я передаю 100 msBurstTime, и когда я печатаю его в потоке, он говорит, что это 32571. Вот код планировщика для выполнения потока:
void Scheduler::startThread(CPU *cpu, IO_manager *io_m){
this->link(cpu, io_m);
pthread_t thread;
pthread_create(&thread, NULL, Scheduler::staticThreadEntry, this);
}
void Scheduler::FCFS(){
while (true){
sleep(2);
if (this->ReadyQueue.size() > 0 && cpu->getRunningProcess() == NULL){
std::cout << this->ReadyQueue.at(0) << ' ';
// burst time out of whack here (32571 ms)
std::cout << this->ReadyQueue.at(0)->getBurstTime() << std::endl;
//std::cout << "Dispatched process" << std::endl;
//this->dispatchProcess();
}
//std::cout << "CPU occupied" << std::endl;
}
}
void* Scheduler::staticThreadEntry(void *self){
((Scheduler*) self)->FCFS();
}
И вот где я вставляю процесс вReadyQueue планировщика:
void Scheduler::insertProcess(Process *p){
// burst time fine here (100 ms)
this->ReadyQueue.push_back(p);
}
Вот что вызывается в main.cpp для инициализации планировщика:
scheduler.startThread(&cpu, &io_m);
и вот что вызывается в main.cpp для вставкипроцесс в ReadyQueue планировщика:
if (strcmp(args[0], "newp") == 0){
// args[1] is process status, args[2] is ms burst time
Process p(stoi(args[1]), stoi(args[2]));
scheduler.insertProcess(&p);
}
Почему это происходит?Я проверяю ссылки на объект процесса, и это тот же экземпляр, так почему переменные-члены меняются?