[问题] 应用Semaphore于容器

楼主: forgmonkey (悲情城市之悲情程式猿)   2020-05-11 18:55:49
开发平台(Platform): (Ex: Win10, Linux, ...)
OSX / Xcode
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
clang
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
问题(Question):
Hi大家好
先附上github
https://github.com/clydewu/Cldlib/tree/master/Cldlib
因为之前是以C++11标准,还没有Semaphore
所以用condition variable实作了Semaphore
然后使用这个semaphore来给予queue最大最小值的限制
若queue.size()超过max或小于min,那尝试push或pop的的thread就会等待
实作的方式是一个样板类别,里面有deque跟semaphore
template <typename T> class SemaphoreQueue
{
deque<T> queue_;
Semaphore* in_semaphore_;
Semaphore* out_semaphore_;
}
那现在希望同样的逻辑可以reuse在List或其他容器上
有点不知道怎么做
初步的想法是要有两个样板参数
一个是容器本身的类型
一个是容器装的东西的类型
e.g.
template <typename T1, typename T2> class SemaphoreContainer
{
T1<T2> queue_;
Semaphore* in_semaphore_;
Semaphore* out_semaphore_;
}
但这样根本编不过XD
不知道这是要用什么c++的机制来做呢?
基础不扎实,关键字请求搂!
作者: nevak (^o^)   2020-05-11 20:00:00
你的template只需要container type就可以了,在用container::value_type去取内容物的type想弄漂亮一点就多加一些compiler assert给点错误讯息,然后注解写清楚传入的container要支援哪些api

Links booklink

Contact Us: admin [ a t ] ucptt.com