Untitled

 avatar
unknown
plain_text
6 months ago
1.6 kB
2
Indexable
// Worker function
/**
 * @brief Worker function for the thread pool.
 *
 * This function is executed by each worker thread in the thread pool. It sets the thread priority,
 * then enters a loop where it waits for tasks to be available in the task queue. When a task is
 * available, it retrieves and executes the task. The loop continues until the thread pool is
 * stopped and there are no more tasks left in the queue.
 *
 * @note This function is intended to be run in a separate thread.
 */
void ThreadPool::Worker() {
	// Set thread priority when the worker starts
	SetThreadPriority(pthread_self(), thread_priority_);

	while (true) {
		Task task;
		{
			std::unique_lock<std::mutex> lock(queue_mutex_);
			condition_.wait(lock, [this] { return stop_ || !tasks_.empty(); });
			if (stop_ && tasks_.empty()) {
				return;
			}
			task = tasks_.top();
			tasks_.pop();
		}
		task.func();  // Execute the task
	}
}

// Set thread priority depending on the platform
/**
 * @brief Sets the priority of a thread.
 *
 * This function sets the scheduling priority of a thread using its native handle.
 * It uses the POSIX pthread_setschedparam function to set the priority.
 *
 * @param handle The native handle of the thread whose priority is to be set.
 * @param priority The priority value to be set for the thread.
 */
void ThreadPool::SetThreadPriority(std::thread::native_handle_type handle, int priority) {
	// Linux priority (using pthread)
	struct sched_param param;
	param.sched_priority = priority;
	pthread_setschedparam(pthread_self(), SCHED_FIFO, &param);
}
Editor is loading...
Leave a Comment