| 649 | } |
| 650 | |
| 651 | void scheduler_t::initialize(const scheudler_config_t & cfg) |
| 652 | { |
| 653 | SkrZoneScopedN("Scheduler::Initialize"); |
| 654 | config = cfg; |
| 655 | for(size_t i = 0; i < spinningWorkers.size(); ++i) |
| 656 | spinningWorkers[i] = -1; |
| 657 | for(size_t i = 0; i < cfg.numThreads; ++i) |
| 658 | { |
| 659 | auto worker = SkrNew<Worker>(); |
| 660 | worker->id = (uint32_t)i; |
| 661 | worker->scheduler = this; |
| 662 | worker->isMainThread = i == 0; |
| 663 | worker->shutdown = false; |
| 664 | workers[i] = worker; |
| 665 | } |
| 666 | for(size_t i = 0; i < cfg.numThreads; ++i) |
| 667 | ((Worker*)workers[i])->start(); |
| 668 | mainWorker = (Worker*)workers[0]; |
| 669 | initialized = true; |
| 670 | } |
| 671 | |
| 672 | void scheduler_t::shutdown() |
| 673 | { |