面试输出一个 线程池
#pragma once
#include <thread>
#include <functional>
#include <vector>
#include <queue>
#include <mutex>
#include <atomic>
#include <condition_variable>
namespace yixiao
{
/**
* @brief 线程池
*
* 1.实现自旋锁队列
* 2.使用条件变量 实现 信号量
* 3.实现ThreadPool
*
*/
template <typename T>
class SpinLockQueue
{
public:
void Push(T &&value)
{
// lock
while (std::atomic_flag_test_and_set_explicit(&spin_lock_, std::memory_order_acquire))
;
queue_.push(std::move(value));
// unlock
std::atomic_flag_clear_explicit(&spin_lock_, std::memory_order_release);
}
std::optional<T> Pop()
{
// lock