Follow-up-Frage: This questionWie Betriebssystem Rückrufe arbeiten
Wie in der verknüpften Frage beschrieben, haben wir eine API, die ein Ereignis aussehen verwendet diese Umfragen() wählen Benutzer definiert Rückrufe zu handhaben.
Ich habe eine Klasse mit diesem wie solche:
class example{
public:
example(){
Timer* theTimer1 = Timer::Event::create(timeInterval,&example::FunctionName);
Timer* theTimer2 = Timer::Event::create(timeInterval,&example::FunctionName);
start();
cout<<pthread_self()<<endl;
}
private:
void start(){
while(true){
if(condition)
FunctionName();
sleep(1);
}
}
void FunctionName(){
cout<<pthread_self()<<endl;
//Do stuff
}
};
Die Idee dahinter ist, dass man Function genannt werden wollen, wenn sowohl die Bedingung wahr ist oder wenn der Timer auf. Kein komplexes Konzept. Was ich mich wundere, ist, wenn FunctionName sowohl in der start() - Funktion als auch durch den Callback zur gleichen Zeit aufgerufen wird? Dies könnte einige Speicherbeschädigungen für mich verursachen, da sie auf einen nicht threadsicheren Teil des gemeinsamen Speichers zugreifen.
Meine Tests sagen mir, dass sie in verschiedenen Threads laufen (Korruption nur, wenn ich die Ereignisse verwende), obwohl: cout<<pthread_self()<<endl;
sagt, sie haben die gleiche Thread-ID.
Kann mir jemand erklären, wie diese Rückrufe abgezweigt werden? Welcher Reihenfolge werden sie gerecht? In welchen Thread laufen sie? Ich nehme an, dass sie in dem Thread ausgeführt werden, der die select() ausführt, aber wann erhalten sie dieselbe Thread-ID?
sollte markiert werden als C nicht C++ – Tom
@Tom, das Codebeispiel ist offensichtlich C++ ... – bdonlan