Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

SEMAFORI

0 views
Skip to first unread message

Progeco

unread,
Jun 23, 1999, 3:00:00 AM6/23/99
to
Il mio problema è quello di accedere in modo sincrono ad una risorsa
condivisa.

In pratica ho tre applicazioni identiche (ognuna delle quali gira su un PC
diverso in rete con gli altri ) , le quali
devono accedere ad un database (posizionato su un altro PC in rete).

Queste applicazioni vengono eseguite nello stesso tempo (allo scadere
dell'ora dell'orologio di sistema ,il quale viene sempre sincronizzato su
tutti i PC)
e quindi devo fare in modo che la prima che accede alla risorsa condivisa
(database) metta in attesa le altre due applicazioni
e via di seguito fin tanto che tutte le applicazioni anno svolto il loro
compito in modo sequenziale.

Qualcuno sa darmi dei suggerimenti su come realizzare questo sincronismo in
modo sicuro .

Grazie per l'attenzione

Piero

Giangi

unread,
Jun 23, 1999, 3:00:00 AM6/23/99
to
Un'ottima soluzione (e all'ultimo grido) sarebbe usare DCOM. (E credimi che
è di una facilità estrema)
Ti crei un'oggetto Multiuse sul server così quando un'oggetto istanziato
dalla tua applicazione è occupato a scrivere dati nel database gli altri
rimangono in attesa xhè condividono il singolo Thread finchè non ha finito.
Oppure ti crei 3 oggetti SingleUse un Mutex e usi l'API WaitForSingleObject
(soluzione + complicata e secondo me inutile). Infatti se tu dichiari una
variabile in un modulo di classe del tuo oggetto ActiveX (MultiUse) questa
sarà condivisa a tutti gli altri e quindi ti puoi fare un bel Mutex (se vuoi
la massima sicurezza).
Inotre potresti, una volta finito il tutto, chiedere lo ShoutDown della
macchina remota e dei client, così lancia la sera, fanno le loro cosine e si
spengono.
Poi potresti farti preparare il caffè verso le 6.00 così arrivi in ufficio e
lo trovi pronto... ma questa è un'altra storia ....


Progeco <apro...@tin.it> wrote in message 7kq79h$d98$1...@nslave1.tin.it...

Gian Michele Bertoni

unread,
Jun 25, 1999, 3:00:00 AM6/25/99
to
Progeco ha scritto nel messaggio <7kq79h$d98$1...@nslave1.tin.it>...

>Il mio problema è quello di accedere in modo sincrono ad una risorsa
>condivisa.

Crei un mutex nominato:

hMutex = CreateMutex(0&, -1&, "MioMutex")

Chiami GetLastError e se restituisce ERROR_ALREADY_EXISTS allora
un'altra applicazione sta usando il database; continui quindi a
ciclare (non con un loop stretto, possibilmente) fino a che non
ottieni errori.

A questo punto procedi con la tua applicazione e, quando hai finito di
usare il database, chiami:

ReleaseMutex(hMutex)

Le definizioni di funzioni e costanti le trovi sull'APIViewer

Ciao

P.S. Questo sistema, ovviamente, serve anche a non lanciare due
istanze della stessa applicazione

Gian Michele Bertoni

homepage: http://space.tin.it/computer/gbertoni

0 new messages