Wie kann man eine Semaphore für eine Variable realisieren? Oder gibt APIs!!
-
Hi!
Wie kann man eine Semaphore für die Variable LanEventDetected realisieren?
Oder gibt irgendwelche APIs dafür, dass zwei Prozesse nicht gleichzeitig dieser
Variable ändern sondern eins nach dem anderen!!Codefragment: Das ist eine Shared memory (Gemeinsamer Speicher)
#pragma data_seg ("COMMON")
// Die Variable LanEventDetected wird von zwei Prozesse manipuliert.
static bool LanEventDetected = false;
#pragma data_seg()Danke
-
-> Critical Section
-
-> Critical Section
Die funktioniert aber nicht über Processgrenzen hinweg. Aber für eine solch einfache Variable reichen die InterlockedXXX-Funktionen massig aus. IMO.
-
hm, in java gibts doch Synchronized dafür, oder ?
-
Was bringt dieser Kommentar?
-
@King
Ich hätte vorher mal in die MSDN schauen sollen, da stehts ja gleich als 1. Zeile.
Gott sei Dank hab ich diese bisher nur für Single Process Zugriffe benutzt
-
Danke
Danke
Ich habe das Problem so gelöst, da zwei unterschiedliche Prozesse dieser
Variable ändern.CMutex mutex;
CSingleLock singleLock(&mutex);
singleLock.Lock();
if(LanEventDetected)
LanEventDetected = false;singleLock.Unlock();
-
Du erzeugst doch hier ein Mutex ohnen Namen. Damit bekommt jeder Process sein eigenes Mutex und Du greifst noch immer ohne Schutz auf die Variable zu. Und selbst wenn Du dem Mutex noch einen Namen verpasst, würde ich das so nicht machen. Du hast doch jedesmal gleich 4 Wechsel in den Kernel-Mode, das kostet richtig Zeit (Mutex anlegen, Lock, Unlock, Mutex freigeben). Mach doch einfach aus Deinem bool ein LONG und schreibe
::InterlockedExchange(&LanEventDetected, FALSE);
[ Dieser Beitrag wurde am 12.03.2003 um 14:49 Uhr von -King- editiert. ]
-
Hi!
Vielen Dank für Deinen Tipp
-
Was bringt dieser Kommentar?
Intelligenz ist eine Illusion des Menschen