V4L2的线程安全性如何?

gsp*_*spr 8 c c++ posix thread-safety v4l2

除了2008年的这封电子邮件之外,我找不到V4L2的线程安全特性.它谈到了大内核锁,我猜现在已经消失了,对吧?

有没有人有这方面的最新信息?我可以ioctl(我正在考虑VIDIOC_DQBUFVIDIOC_QBUF)来自多个线程的相同V4L2文件描述符而不进行序列化吗?上面引用的讨论确实表明答案是依赖于驾驶员的,但我想我还是会问.

Ser*_* K. 4

规范中没有提及V4L2是否是线程安全的。然而,似乎有些实现实际上是线程安全的。

POSIX.1-2001和POSIX.1-2008要求标准中规定的所有函数都应该是线程安全的,除了一些特定函数。ioctl() 不是其中之一,因此它是线程安全的。然而,ioctl()是一个取消点,因此线程一旦到达ioctl()就可以终止。

我认为正确的解决方案是假设 V4L2 不是线程安全的并相应地进行锁定。