Ich verwende Native APIs der Funkschichtschnittstelle (RIL) en Windows Mobile-Anwendung . In dieser API werden die Rückgabewerte/Ergebnisse der meisten Funktionen nicht sofort zurückgegeben, sondern über eine Callback-Funktion, die an die RIL-API weitergegeben wird.
Einige Anwendungsbeispiele finden Sie unter XDA-Entwicklungswerkzeuge y Google Zahnräder Geolokalisierung API .
Meine Frage ist, in diesen beiden Beispielen wird ein Mutex verwendet, um die Daten anstelle von anderen Synchronisationsobjekten zu schützen.
Wird der Kritische Abschnitt in den von den beiden Beispielen beschriebenen Anwendungsfällen gut funktionieren? Welcher Thread oder Prozess wird die Callback-Funktionen tatsächlich aufrufen?
Bearbeiten:
Meine Daten werden von meinen Codes nur innerhalb meines Prozesses abgerufen, aber welcher Thread/Prozess ruft die Callback-Funktionen in der RIL-API auf? Ich meine, ich habe eine Callback-Funktion an die RIL-API übergeben, aber werden die Callbacks von einem anderen Prozess aufgerufen? In diesem Fall gibt es eine weitere Erklärung, warum die Beispiele Mutex verwenden. Wenn die RIL-API tatsächlich einen Thread innerhalb meines Prozesses erstellt und meine Callback-Funktionen aufruft, dann denke ich, dass Critical Section in Ordnung wäre (und es ist schneller als ein Mutex).
Aktualisierung:
Ich habe Daten, die (1) meine Codes aus meinem eigenen Prozess abgerufen werden und ist auch (2) aus einem Funktionsrückruf geändert. Der Rückruf erfolgt über die RIL-API.
Meine Frage: Welcher Thread/Prozess ruft die Callback-Funktionen in der RIL-API auf?
Die Geschichte bis jetzt:
Ich: Hallo Herr RIL, bitte geben Sie einige Daten in mein Büro ein (z.B. in Form von Variablen).
RIL: Okay, Sir. Ich werde die Daten später eingeben und Ihnen ein Signal geben, wenn es fertig ist (ich habe hier ein Ereignis verwendet).
Für den Zugang zu meinem Büro ist eine Zugangskarte erforderlich. Wenn Herr RIL aus demselben Unternehmen wie ich kommt, kann er seine eigene Zugangskarte benutzen, um mein Büro zu betreten (in meinem Fall ist es ein kritischer Bereich). Wenn er von einem anderen Unternehmen kommt, muss ich eine Zugangskarte/Besucherkarte für ihn einrichten (in meinem Fall benötige ich hier einen Mutex).
Wenn Herr RIL seine eigene Zugangskarte verwendet, brauche ich keine Zugangskarte/Besucherkarte für ihn einzurichten, was für mich weniger Ärger bedeutet. (d.h. Critical Section ist schneller als ein Mutex)
Das Problem ist, dass ich diesen Herrn RIL erst vor ein paar Tagen getroffen habe und nicht viel über ihn weiß. Ich weiß nicht, ob er zum selben Unternehmen gehört wie ich. Eine Option als erwähnt von nobugz ist es, eine Zugangskarte für Herrn RIL einzurichten, unabhängig davon, ob Herr RIL demselben Unternehmen angehört wie ich. Auf diese Weise ist gewährleistet, dass Herr RIL mein Büro betreten kann. (meine Daten/Variablen sind garantiert sicher)
Im Moment verwende ich Mutex in meinem Code (Einrichtung einer möglicherweise redundanten Zugangskarte für Herrn RIL).
Aha! Beim Schreiben dieser Zeilen kam mir gerade eine Idee. Ich denke, ich werde Herrn RIL einfach fragen, von welchem Unternehmen er ist. Auf diese Weise muss ich in Zukunft keine Zugangskarte für ihn einrichten, wenn sich herausstellt, dass er in derselben Firma wie ich arbeitet (d.h. GetCurrentProcessId()
y GetCurrentThreadId()
in der Rückruffunktion)