MCPcopy Create free account
hub / github.com/apache/arrow / SetCapacity

Method SetCapacity

cpp/src/arrow/util/thread_pool.cc:567–589  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

565}
566
567Status ThreadPool::SetCapacity(int threads) {
568 std::unique_lock<std::mutex> lock(state_->mutex_);
569 if (state_->please_shutdown_) {
570 return Status::Invalid("operation forbidden during or after shutdown");
571 }
572 if (threads <= 0) {
573 return Status::Invalid("ThreadPool capacity must be > 0");
574 }
575 CollectFinishedWorkersUnlocked();
576
577 state_->desired_capacity_ = threads;
578 // See if we need to increase or decrease the number of running threads
579 const int required = std::min(static_cast<int>(state_->pending_tasks_.size()),
580 threads - static_cast<int>(state_->workers_.size()));
581 if (required > 0) {
582 // Some tasks are pending, spawn the number of needed threads immediately
583 LaunchWorkersUnlocked(required);
584 } else if (required < 0) {
585 // Excess threads are running, wake them so that they stop
586 state_->cv_.notify_all();
587 }
588 return Status::OK();
589}
590
591int ThreadPool::GetCapacity() {
592 std::unique_lock<std::mutex> lock(state_->mutex_);

Callers 6

SetIOThreadPoolCapacityFunction · 0.80
JoinBenchmarkMethod · 0.80
TestCopyFilesMethod · 0.80
MakeMethod · 0.80
SetCpuThreadPoolCapacityFunction · 0.80
TEST_FFunction · 0.80

Calls 3

InvalidFunction · 0.50
OKFunction · 0.50
sizeMethod · 0.45

Tested by 2

TestCopyFilesMethod · 0.64
TEST_FFunction · 0.64