提交 a071ba8b 编写于 作者: 独孤过's avatar 独孤过

update v2.3.0

上级 c176a1f1
......@@ -47,13 +47,14 @@ template <typename _Size = std::size_t>
class Condition final
{
public:
enum class Strategy : std::uint8_t
enum class Policy : std::uint8_t
{
STRICT, RELAXED
};
public:
using Size = _Size;
using Strategy = Policy;
private:
std::mutex _mutex;
......@@ -83,11 +84,11 @@ public:
void exit();
void notify_one(Strategy _strategy = Strategy::STRICT);
void notify_one(Policy _policy = Policy::STRICT);
void notify_all(Strategy _strategy = Strategy::STRICT);
void notify_all(Policy _policy = Policy::STRICT);
void notify(Size _size, Strategy _strategy = Strategy::STRICT);
void notify(Size _size, Policy _policy = Policy::STRICT);
template <typename _Predicate>
void notify_one(_Predicate _predicate);
......@@ -132,29 +133,29 @@ void Condition<_Size>::exit()
}
template <typename _Size>
void Condition<_Size>::notify_one(Strategy _strategy)
void Condition<_Size>::notify_one(Policy _policy)
{
std::unique_lock lock(_mutex);
if (_strategy == Strategy::RELAXED) lock.unlock();
if (_policy == Policy::RELAXED) lock.unlock();
_condition.notify_one();
}
template <typename _Size>
void Condition<_Size>::notify_all(Strategy _strategy)
void Condition<_Size>::notify_all(Policy _policy)
{
std::unique_lock lock(_mutex);
if (_strategy == Strategy::RELAXED) lock.unlock();
if (_policy == Policy::RELAXED) lock.unlock();
_condition.notify_all();
}
template <typename _Size>
void Condition<_Size>::notify(Size _size, \
Strategy _strategy)
Policy _policy)
{
std::unique_lock lock(_mutex);
if (_strategy == Strategy::RELAXED)
if (_policy == Policy::RELAXED)
lock.unlock();
for (decltype(_size) index = 0; \
......
......@@ -341,8 +341,8 @@ bool Thread::configure(TaskType&& _task, \
// 激活线程
bool Thread::notify()
{
using Policy = Condition<>::Policy;
using State = Structure::State;
using Strategy = Condition<>::Strategy;
auto data = load();
if (!data)
......@@ -360,7 +360,7 @@ bool Thread::notify()
if (state != State::RUNNABLE)
return false;
data->_condition.notify_one(Strategy::RELAXED);
data->_condition.notify_one(Policy::RELAXED);
return true;
}
......
......@@ -142,7 +142,7 @@ void ThreadPool::Structure::setCapacity(SizeType _capacity, \
auto capacity = this->_capacity.exchange(_capacity, \
std::memory_order_relaxed);
if (_notified && capacity != _capacity)
_condition.notify_one(Condition<>::Strategy::RELAXED);
_condition.notify_one(Condition<>::Policy::RELAXED);
}
// 放入任务
......@@ -151,7 +151,7 @@ bool ThreadPool::Structure::pushTask(const TaskType& _task)
// 若放入任务之前,任务队列为空,则通知守护线程
auto result = _taskQueue->push(_task);
if (result && result.value() == 0)
_condition.notify_one(Condition<>::Strategy::RELAXED);
_condition.notify_one(Condition<>::Policy::RELAXED);
return result.has_value();
}
......@@ -161,7 +161,7 @@ bool ThreadPool::Structure::pushTask(TaskType&& _task)
// 若放入任务之前,任务队列为空,则通知守护线程
auto result = _taskQueue->push(std::forward<TaskType>(_task));
if (result && result.value() == 0)
_condition.notify_one(Condition<>::Strategy::RELAXED);
_condition.notify_one(Condition<>::Policy::RELAXED);
return result.has_value();
}
......@@ -174,7 +174,7 @@ bool ThreadPool::Structure::pushTask(TaskQueue& _taskQueue)
// 若放入任务之前,任务队列为空,则通知守护线程
auto result = this->_taskQueue->push(_taskQueue);
if (result && result.value() == 0)
_condition.notify_one(Condition<>::Strategy::RELAXED);
_condition.notify_one(Condition<>::Policy::RELAXED);
return result.has_value();
}
......@@ -187,7 +187,7 @@ bool ThreadPool::Structure::pushTask(TaskQueue&& _taskQueue)
// 若放入任务之前,任务队列为空,则通知守护线程
auto result = this->_taskQueue->push(std::forward<TaskQueue>(_taskQueue));
if (result && result.value() == 0)
_condition.notify_one(Condition<>::Strategy::RELAXED);
_condition.notify_one(Condition<>::Policy::RELAXED);
return result.has_value();
}
......@@ -294,7 +294,7 @@ void ThreadPool::create(DataType&& _data, SizeType _capacity)
if (auto data = _data.lock(); data \
&& (data->setIdleSize(1, Arithmetic::INCREASE) == 0 \
|| data->getIdleSize() >= data->getTotalSize()))
data->_condition.notify_one(Condition<>::Strategy::RELAXED);
data->_condition.notify_one(Condition<>::Policy::RELAXED);
};
// 初始化线程并放入线程表
......@@ -321,7 +321,7 @@ void ThreadPool::create(DataType&& _data, SizeType _capacity)
void ThreadPool::destroy(DataType&& _data)
{
using Arithmetic = Structure::Arithmetic;
using Strategy = Condition<>::Strategy;
using Policy = Condition<>::Policy;
// 避免重复销毁
if (!_data->isValid()) return;
......@@ -330,7 +330,7 @@ void ThreadPool::destroy(DataType&& _data)
_data->setValid(false);
// 通知守护线程退出
_data->_condition.notify_all(Strategy::RELAXED);
_data->_condition.notify_all(Policy::RELAXED);
// 分离守护线程
//_data->_thread.detach();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册