Ich konnte die Threadsicherheitseigenschaften von V4L2 nicht nennen, außer diese E-Mail von 2008 . Es spricht von der großen Kernel-Sperre, von der ich denke, dass sie jetzt weg ist, oder?
Hat jemand aktualisierte Informationen dazu? Kann ich ioctl
(ich denke vor allem an VIDIOC_DQBUF
und VIDIOC_QBUF
) den gleichen V4L2-Dateideskriptor aus mehreren Threads ohne Serialisierung? Die oben zitierte Diskussion scheint darauf hinzudeuten, dass die Antwort vom Fahrer abhängt, aber ich dachte, ich würde trotzdem fragen.
In der Spezifikation wird nicht erwähnt, ob V4L2 Thread-sicher ist. Es scheint jedoch, dass einige Implementierungen tatsächlich Thread-sicher sind.
POSIX.1-2001 und POSIX.1-2008 erfordern, dass alle im Standard spezifizierten Funktionen threadsicher sind, mit Ausnahme einiger spezifischer Funktionen. ioctl () gehört nicht dazu, also ist es Thread-sicher. Ioctl () ist jedoch ein Löschpunkt, sodass der Thread beendet werden kann, sobald er ioctl () erreicht hat.
Ich denke, dass die korrekte Lösung darin besteht, anzunehmen, dass V4L2 nicht threadsicher ist und das Sperren entsprechend durchführt.
Tags und Links c c++ thread-safety posix v4l2