diff --git a/src/Queue.hpp b/src/Queue.hpp index c328f1cb24945a6884a9b2bfe92a16e11a95c156..94379ba8c1c4fab624f2d225459a8caafc9f6134 100644 --- a/src/Queue.hpp +++ b/src/Queue.hpp @@ -10,7 +10,7 @@ 作者:许聪 邮箱:2592419242@qq.com 创建日期:2019年03月08日 -更新日期:2022年01月22日 +更新日期:2022年01月29日 变化: v1.5 @@ -109,29 +109,27 @@ std::optional::SizeType> Queue<_ElementType>::push( template std::optional::SizeType> Queue<_ElementType>::push(QueueType& _queue) { - auto length = _queue.size(); - std::lock_guard lock(_entryMutex); if (auto size = this->size(); \ - _capacity > 0 && (size >= _capacity || length >= _capacity - size)) + _capacity > 0 && (size >= _capacity || _queue.size() >= _capacity - size)) return std::nullopt; + auto size = _queue.size(); _entryQueue.splice(_entryQueue.cend(), _queue); - return add(length); + return add(size); } template std::optional::SizeType> Queue<_ElementType>::push(QueueType&& _queue) { - auto length = _queue.size(); - std::lock_guard lock(_entryMutex); if (auto size = this->size(); \ - _capacity > 0 && (size >= _capacity || length >= _capacity - size)) + _capacity > 0 && (size >= _capacity || _queue.size() >= _capacity - size)) return std::nullopt; + auto size = _queue.size(); _entryQueue.splice(_entryQueue.cend(), _queue); - return add(length); + return add(size); } template @@ -171,10 +169,8 @@ bool Queue<_ElementType>::pop(QueueType& _queue) template void Queue<_ElementType>::clear() { - std::lock_guard exitLock(_exitMutex); + std::scoped_lock lock(_exitMutex, _entryMutex); _exitQueue.clear(); - - std::lock_guard entryLock(_entryMutex); _entryQueue.clear(); set(0); }