Camera Open/Close lock/release über Semaphore

  • Antworten:5
  • Bentwortet
Matthias B
  • Forum-Beiträge: 3

13.10.2020, 11:43:13 via Website

Sehr geehrte Nutzer dieses Forums,
ich komme mit einer Frage zu ihnen in der Hoffnung mich mit Ihrem Entwicklerwissen zu beeindrucken.

Frage:
Wieso ist es notwendig beim Starten und Schließen der Kamera ein Semaphore mit einer max Thread Zahl von 1 zu nutzen. Was wird dadurch verhindert? Was sind Fälle die passieren können wenn man dies nicht tut?

Meine eigene Antwort auf die Frage ist derzeit:
Beim Öffnen/Schließen der Kamera könnten Threads gestartet werden die das Öffnen/Schließen verzögern und in dem Zuge kann es beispielsweise zu einer Schließung der App kommen während die Kamera in einem undefinierten Zustand ist oder einem Zwischenzustand. Der aktuelle State der Kamera muss zu jedem Zeitpunkt definiert sein, damit man gewährleisten kann das die Kamera beim Verlassen der Applikation freigegeben und durch andere Apps nutzbar gemacht wird.

Wenn hier vernünftige Leute sind mit denen man ordentlich über Fragestellungen Diskutieren kann und Lösungen finden kann, dann kann man ja überlegen öfter hier in das Forum rein zu schauen und gegebenenfalls auch mal gemeinsame Projekte zu starten. :)

Mit freundlichen Grüßen
Matthias B.

Kommentieren
Beste Antwort
Jokel
  • Forum-Beiträge: 1.530

13.10.2020, 15:51:41 via Website

Ich möchte mich nicht rumstreiten aber try and catch hat mit multi threading nichts zu tun.

Auch war das mit den zwei app nur als Beispiel gedacht. Ob es nun verschiedene sind oder nur eine die mehrere Threads started ist doch auch erst mal egal. Wichtig ist das es nicht gleichzeitig neherere Zugriffe geben soll.
Wie gut wie Methoden der Cam Thread sicher Poragammiert sind keine Ahnung.

Sicher ist das es in einem Multithread Partiellen System zu gleichzeitigen Zugriffen kommen kann. Denn eine Multicore CPU kann echt parallel arbeiten eine singelcore CPU eigentlich nicht.
Mehr kann und will ich hier auch nicht dazu sagen.

Bin gespannt auf die anderen Meinungen. Der User des Forums.

So in dem Sinne.

— geändert am 13.10.2020, 15:55:18

Hilfreich?
Matthias B
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

13.10.2020, 12:03:04 via Website

Hallo

Was wird dadurch verhindert?

Das zwei Threads zur gleichen Zeit auf die Kamera zugreifen.
Wenn das zb zwei Apps sind an wehn soll , das Bild übergeben werden.

Gleiche Zeit ich meine wirklich gleiche Zeit wir haben Multicore CPUs. Aber nur eine Kamera.

— geändert am 13.10.2020, 12:06:26

Hilfreich?
Matthias B
Kommentieren
Matthias B
  • Forum-Beiträge: 3

13.10.2020, 12:24:31 via Website

[[cite Jokel]]
Das zwei Threads zur gleichen Zeit auf die Kamera zugreifen.
Wenn das zb zwei Apps sind an wehn soll , das Bild übergeben werden.

Ich verstehe jetzt was das mit der Ausgabe von einem Bild zu tun hat, danke dafür, allerdings richtet man keinen Semaphore ein der die gesamte Laufzeit mit allen Kameraaktivitäten überdauert, das wäre wahrscheinlich nicht mal möglich, da auch Threads laufen müssen um den Fokus manuell zu verstellen, Filter im Vorraus über den Preview zu legen oder den Zoom anzupassen. Ggf. gibt es ja auch noch Weitwinkelfunktionen, diese Threads haben ja ihre Daseinsberechtigung.

Ich spreche von dem Öffnen und Schließen der Kamera, dort wird diese kurz, also im kritischen Bereich per Semaphore abgesichert und das ergibt für mich noch nicht sehr viel Sinn, denn in welchem Anwendungsfall kriegt man es schon hin die Kamera über 2 Apps gleichzeitig zu öffnen, so schnell kann die GPU doch nicht zwischen App Overlays switchen, das dieser Fall eintreten kann.

Dort könnte man doch ebenso try/catch verwenden denn wenn die Camera bereits in einer anderen App offen ist wird der Vorgang des Öffnens nicht ausgeführt.

Verstehen sie was ich meine, wieso wird der Vorgang des Öffnens und Schließens hier als kritischer Bereich gehandhabt?

Gleiche Zeit ich meine wirklich gleiche Zeit wir haben Multicore CPUs. Aber nur eine Kamera.

Hilfreich?
Kommentieren
Beste Antwort
Jokel
  • Forum-Beiträge: 1.530

13.10.2020, 15:51:41 via Website

Ich möchte mich nicht rumstreiten aber try and catch hat mit multi threading nichts zu tun.

Auch war das mit den zwei app nur als Beispiel gedacht. Ob es nun verschiedene sind oder nur eine die mehrere Threads started ist doch auch erst mal egal. Wichtig ist das es nicht gleichzeitig neherere Zugriffe geben soll.
Wie gut wie Methoden der Cam Thread sicher Poragammiert sind keine Ahnung.

Sicher ist das es in einem Multithread Partiellen System zu gleichzeitigen Zugriffen kommen kann. Denn eine Multicore CPU kann echt parallel arbeiten eine singelcore CPU eigentlich nicht.
Mehr kann und will ich hier auch nicht dazu sagen.

Bin gespannt auf die anderen Meinungen. Der User des Forums.

So in dem Sinne.

— geändert am 13.10.2020, 15:55:18

Hilfreich?
Matthias B
Kommentieren
Matthias B
  • Forum-Beiträge: 3

13.10.2020, 16:15:28 via Website

[[cite Jokel]]
Auch war das mit den zwei app nur als Beispiel gedacht. Ob es nun verschiedene sind oder nur eine die mehrere Threads started ist doch auch erst mal egal. Wichtig ist das es nicht gleichzeitig neherere Zugriffe geben soll.

Ah, jetzt ist der Groschen bei mir gefallen. Es könnten in meiner App mehrere Threads(Da Multicore CPU) gleichzeitig versuchen die Kamera zu öffnen beispielsweise. Wie genau die Aufgabenverteilung in einer Multicore CPU verläuft und ob es anhand von meinem bisherigen Code dann überhaupt möglich ist einen Mehrfachzugriff zu praktizieren ist ja etwas Anderes.

Ich bedanke mich für deine Antwort Jokel, du kannst dir sicher sein einem Studenten bei seinem Werdegang sehr geholfen zu haben.

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

13.10.2020, 18:06:24 via Website

Schön das du es nun verstanden hast was ich sagen wollte.
Bedenke auch wenn dein geschriebener
Code Thread sicher ist. Und es in deiner app nicht dazu kommen kann das deine app zwei Zugriffe zur gleichen zeit macht. Kann es in einem muti threading system wie android doch passieren das zb ein im hindergrund laufender service auch auf die Cam zugreift. Und genau das will android verhindern. Ein Zugriff von zwei Seiten auf die gleiche Resourse. Zur fast gleichen Zeit.

Freue mich das ich doch helfen konnte.

— geändert am 13.10.2020, 18:08:11

Hilfreich?
Matthias B
Kommentieren