Переглянути джерело

channel支持无效模式,以优化某些情况下的使用效率

3.0.0
tearshark 2 роки тому
джерело
коміт
1e27943825
2 змінених файлів з 21 додано та 0 видалено
  1. 11
    0
      include/librf/src/channel_v2.h
  2. 10
    0
      include/librf/src/channel_v2.inl

+ 11
- 0
include/librf/src/channel_v2.h Переглянути файл

@@ -76,6 +76,17 @@ namespace detail
write_awaiter write(U&& val) const noexcept(std::is_nothrow_move_constructible_v<U>);


/**
* @brief 构造一个无效的信号量。
* @details 如果用于后续保存另外一个信号量,则应当使用此构造函数,便于节省一次不必要的内部初始化。
*/
channel_t(std::adopt_lock_t);

/**
* @brief 判断是不是一个无效的信号量。
*/
bool valid() const noexcept;

#ifndef DOXYGEN_SKIP_PROPERTY
using value_type = _Ty;


+ 10
- 0
include/librf/src/channel_v2.inl Переглянути файл

@@ -460,7 +460,11 @@ namespace detail
channel_t<_Ty, _Optional, _OptimizationThread>::channel_t(size_t cache_size)
:_chan(std::make_shared<channel_type>(cache_size))
{
}

template<class _Ty, bool _Optional, bool _OptimizationThread>
channel_t<_Ty, _Optional, _OptimizationThread>::channel_t(std::adopt_lock_t)
{
}

template<class _Ty, bool _Optional, bool _OptimizationThread>
@@ -499,4 +503,10 @@ namespace detail
return write_awaiter{ _chan.get(), std::forward<U>(val) };
}

template<class _Ty, bool _Optional, bool _OptimizationThread>
bool channel_t<_Ty, _Optional, _OptimizationThread>::valid() const noexcept
{
return (bool)_chan;
}

} //namespace librf

Завантаження…
Відмінити
Зберегти