|
|
1
16
当然,这里有没有锁的队列。不过,根据您在评论中所说的,这里的性能一点也不重要,因为您无论如何都要为每次写入创建一个线程。 所以,这是一个条件变量的标准用例。使自己成为一个包含互斥体、条件变量、链接列表(或者循环缓冲区(如果愿意))和取消标志的结构:
如果您使用的是一个带有外部节点的列表,那么您可能需要在互斥锁之外分配内存,只是为了减少它的保留时间。但是,如果您使用一个可能最简单的侵入式列表节点设计事件。 编辑:如果在“取消”中,您将“信号”更改为“广播”,您还可以支持多个读卡器(没有便携式保证,其中一个获得给定事件)。虽然你不需要它,但它也不需要任何东西。 |
|
|
2
5
如果您不需要无锁队列,那么您可以用一个锁来结束现有的队列。
之后唯一的事情就是在队列为空时为mtqueueNext添加某种处理。 编辑: 如果您有一个读卡器、一个编写器无锁队列,那么您只需要在mtqueuepush周围有一个锁,以防止多个同时编写器。 有一个读写器无锁队列的NUBMER,但大多数都是以C++模板类实现的。然而,做一个谷歌搜索,如果需要的话,要想办法用普通的C语言重写它们。 |
|
|
3
4
|
|
|
4
1
我将使用多个单个编写器队列(每个编写器线程一个)。然后你可以查一下 this 如何让单个读卡器读取各种队列。 |
|
|
MaPo · Linux,设置锁定ICMP_过滤器选项 1 年前 |
|
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 1 年前 |
|
|
Bobby · 复合字面值总是左值吗? 1 年前 |
|
9-Pin · C: 嵌套结构的堆栈内存分配 1 年前 |