V4L2 的线程安全性如何

How thread-safe is V4L2?

本文关键字:安全性 线程 V4L2      更新时间:2023-10-16

除了这封 2008 年的电子邮件外,我找不到任何关于 V4L2 线程安全特性的提及。它谈到了大内核锁,我想现在已经消失了,对吧?

有人对此有任何更新信息吗?我可以在不序列化的情况下从多个线程ioctl(我特别考虑VIDIOC_DQBUFVIDIOC_QBUF)相同的 V4L2 文件描述符吗?上面引用的讨论似乎确实表明答案取决于驱动程序,但我想我还是会问。

该规范没有提到 V4L2 是否是线程安全的。但是,似乎某些实现实际上是线程安全的。

POSIX.1-2001

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

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