除了this e-mail from 2008之外,我找不到V4L2的线程安全特性。它谈到了大内核锁,我猜现在已经消失了,对吗?
有人对此有任何更新信息吗?我可以ioctl
(我特别想到VIDIOC_DQBUF
和VIDIOC_QBUF
)来自多个线程的相同V4L2文件描述符而不进行序列化吗?上面引用的讨论确实表明答案是依赖于驾驶员的,但我想我还是会问。
答案 0 :(得分:3)
规范没有提到V4L2是否是线程安全的。但是,似乎某些实现实际上是线程安全的。
POSIX.1-2001和POSIX.1-2008要求标准中指定的所有函数都是线程安全的,但某些特定函数除外。 ioctl()不是其中之一,所以它是线程安全的。 但是,ioctl()是一个取消点,所以线程一旦到达ioctl()就可以终止。
我认为正确的解决方案是假设V4L2不是线程安全的并且相应地进行锁定。