Globale Semaphore erstellen, zugriff auf Datenbank von Mehreren Progs gleichzeitig verhindern
-
Hallo,
Ich habe eine Frage zu globalen look variablen:
wie kann ich einen Globalen Semphore (Globales Event) erstellen und verhindern das meherere Programme gleichzeitig auf eine Datenbank zugreifen ?
Fisch
-
meherere Programme
Was genau meinst du damit ....
- wenn clienta.exe auf deine DB zugreift, duerfen dann clientb.exe usw nur nich mehr zugreifen ... aber zig andere mit clienta.exe trotzdem ?
- oder meinst du, es kann immer nur einer zugreifen, egal welchen client er hat ?
Prinzipiell wuerd ich das die DB selber machen lassen, weil die kennt ihre Pappenheimer (clients) am besten, und bringt extra mechanismen dafuer mit (wenn es nen multiuserfaehiges RDBMS ist) ...
Fuer variante 2:
einfach gleich beim login ne table sperren lassen ... und erst beim logout freigeben (nicht grad die hoefliche art, aber effektiv fuer dein ansinnen) und voiala, alle die nachher auch die gelockte table locken wollen, bekommen entsprechende meldungen ^^Prinzipiell kannst das schon aber auch selber machen ...
Ja unter windows kannst das mit genamten objekten tun(shared memory, pipes, Events ...) mit gleichen namen enlegen, und der erste bekommt nen ok, der 2.te nen verweiss auf das schon angelgte mit nem entsprechenden rueckabewert ...unter unix nimmt man auch oft das dateisystem her (lock files) weiss nich was einem da so an IPC sachen angeboten wird und was da performanter ist ...
Ciao ...
-
ich würde es gerne mit mutexen machen wer kennt sich aus ?
-
Welches BS ?
und rechneruebergreifend, oder immer nur auf einen rechner beschraenkt ? (mich verwirrt das mit der datenbank immer noch, weil die grad fuer sowas da sein sollt)
Ciao ...
-
für visual studio -> windows
jezt ist erst mal egal wie mann das anderst machen kann ich würde nur gern ein beispiel sehen wie mann programmzugriffe mit nem look versehen kann (semaphore oder globaler mutex )
-
Wenn du dich auf Windows festlegen willst:
-
So wie ich es aber verstanden hab, will er fuer mehrere programme (unterschiedliche .exe, und / oder mehrere instanzen einer .exe) nen zugriff locken,d a hilft ihme ne CS ned weiter .... also klar unterscheiden zwischen multithreading und multiprocessing !
Also innerhalb deines Prozesses fuer unterschiedliche Threads -> critical sections (klein und performant) !
fuer prozess externe locks -> IPC Objecte des BS -> named Mutex (zum Beispiel, gehen auch events...) wichtig ist das die dinger named sind, denn nur nen namen kannst gleich halten ... objecte bekommst nun mal nicht ueber prozessgrenzen geshared.CreateMutex - This function creates a named or unnamed mutex object.
...Multiple processes can have handles of the same mutex object, enabling use of the object for interprocess synchronization. To provide object sharing, a process can specify the name of a mutex object in a call to the CreateMutex function.
Steht doch alles was man braucht ^^
Und auf den Mutex isser ja selbst schon gekommen ... nu haett er nur noch in der MSDN schaun muessen
Ciao ...
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Was für eine DB hast Du denn, dass Du sowas machen willst???
Bei einer richtigen DB braucht man sowas nicht zu machen... da arbeitet man mit Transaktionen und hat solche "Probleme" nicht...