AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Shared Memory & Semaphores. Was für eine ID nehme ich?
Thema durchsuchen
Ansicht
Themen-Optionen

Shared Memory & Semaphores. Was für eine ID nehme ich?

Ein Thema von yankee · begonnen am 22. Apr 2007 · letzter Beitrag vom 22. Apr 2007
Antwort Antwort
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#1

Shared Memory & Semaphores. Was für eine ID nehme ich?

  Alt 22. Apr 2007, 09:43
Hi @ll,

ich möchte zwei Prozesse miteinander kommunizieren lassen.
Im Endeffekt solll das ganze unter Linux mit php laufen, aber für das Problem selbst tut es eigentlich nichts zur Sache:

Ich kann mit sem_acquire und sem_release das gleiche bewirken wie in Windows mit der CriticalSection. Dafür muss ich erst mit sem_get(integer) mit eine semid holen. Jeder andere Prozess, der jetzt ebenfalls sem_get(integer) mit dem gleichen integer aufruft erhält die gleiche semid und so haben beide Prozesse die gleiche Semaphore, mit der sie sich schön gegenseitig sperren können.

Aber was für eine Zahl nehme ich als Parameter für sem_get? Wenn irgend ein anderer Prozess zufällig diese id schon hat, dann dürfte ich schliesslich lustige Effekte bekommen, da ein dritter unbekanter Prozess noch in meiner semaphore irgendwas macht.
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#2

Re: Shared Memory & Semaphores. Was für eine ID nehme ic

  Alt 22. Apr 2007, 11:27
Unter Linux (*nix allgemein) ist es gaengiger mit Sperrdateien (Lock files) zu arbeiten. So eine Sperrdatei koennte im Uebrigen die PID des "Master-Prozesses" enthalten, wodurch sie dann beiden bekannt ist.

Kritische Abschnitte unter Windows sind uebrigens nur fuer den aktuellen Prozess gueltig. Semaphoren gibt es auch, die haben jedoch ueblicherweise einen Namen. Vorteil gegenueber einem Mutex ist dabei, dass die Semaphore eine Aussage erlaubt, wieviele Clients gerade die eine oder andere Aktion machen. Dadurch kann man den Zugriff der Clients feinkoerniger koordinieren.
  Mit Zitat antworten Zitat
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#3

Re: Shared Memory & Semaphores. Was für eine ID nehme ic

  Alt 22. Apr 2007, 11:37
Mhhh...

Wenn ich eine Datei verwende habe ich aber doch ein Problem auf das verschwionden der Datei zu warten, oder?

Es geht mir nämlich im Endeffekt darum, dass das eine Skript auf ein Event in einem anderen Script warted. So sleepe ich also genüsslich vormich in bis die sem_release in dem eventauslösenden Thread aufgerufen wurde.
Wenn ich jetzt mit einer while-Schleife auf die Existenz einer Datei warte, dann geht das doch bestimmt entweder stark auf die CPU, oder (bei verwendung von sleep) habe ich ein "lag" drin, bis das event mal ankommt. Oder gibt es da was vergleichbares?
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#4

Re: Shared Memory & Semaphores. Was für eine ID nehme ic

  Alt 22. Apr 2007, 12:47
Wie ist das Verhaeltnis der beiden Prozesse/Skripte? Erzeugt das eine Daten und das andere verarbeitet sie?
Mach dich auch mal mit Named Pipes vertraut.
  Mit Zitat antworten Zitat
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#5

Re: Shared Memory & Semaphores. Was für eine ID nehme ic

  Alt 22. Apr 2007, 12:56
Zitat von Robert Marquardt:
Wie ist das Verhaeltnis der beiden Prozesse/Skripte? Erzeugt das eine Daten und das andere verarbeitet sie?
Es sind immer 2 Scripte, die zusammenarbeiten...
Wenn es fertig ist, dann soll das ganze ein IRC-Client, der komplett in php und Javascript realisiert ist werden.

Dabei gibt es ein Script, welches auf Endlosschleife läuft und die eigentliche Arbeit des irc-clients macht (also Nachrichten schreiben und empfangen.
Das zweite Script wird vom Browser per AJAX aufgerufen und warted darauf, dass das 1. Script eine Nachricht empfangt. Sobald dies der Fall ist sendet das Script seine Antwort an den Browser und schliesst die Verbindung zum Browser, damit der AJAX-Request komplett ist und der die Daten darstellen kann. Der Browser baut daraufhin die Verbindung zum 2. Script natürlich sofort wieder auf.
Das ganze funktioniert auch schon, aber als semid mit einer Konstante, die ich mal so zufallsmässig definiert habe. So kann ich natürlich nur ein Script gleichzeitig auf dem Server laufen haben, weil die Konstante ja schon in Verwndung ist. Mal abgesehen von bösen Überraschungen, wenn ein weiteres Programm genau die id schon verwendet...
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz