作者forgmonkey (_00_)
看板C_and_CPP
标题[问题] 应用Semaphore於容器
时间Mon May 11 18:55:49 2020
开发平台(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++的机制来做呢?
基础不紮实,关键字请求搂!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 125.227.249.37 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1589194552.A.0EB.html
※ 编辑: forgmonkey (125.227.249.37 台湾), 05/11/2020 19:00:10
1F:→ nevak: 你的template只需要container type就可以了,在用containe 05/11 20:00
2F:→ nevak: r::value_type去取内容物的type 05/11 20:00
3F:→ nevak: 想弄漂亮一点就多加一些compiler assert给点错误讯息,然 05/11 20:01
4F:→ nevak: 後注解写清楚传入的container要支援哪些api 05/11 20:01
喔喔,是说使用的时候是像
SemaphoreContainer<deque<string>> MyQueue;这样吗?
喔喔喔,感谢!
※ 编辑: forgmonkey (122.116.126.210 台湾), 05/12/2020 00:14:57