Newsgroup: it.comp.lang.perl
Titolo: Come fare un lock in windows 98 ???

Ho provato con flock, ma non funge. Come posso impelementare un po' di
multiutenza  ???
			Silvano

 multiutenza  ???
se non erro (correggetemi) flock e' una funzione che dipende dal sistema
operativo e credo che su win98 non sia presente.
Prova a guardare LockFile::Simple che trovi su CPAN (ovviamente).
	Hope this helps
	Best Regards,
		Kazuma
-- 
Alex Garbagnati, 
agarb...@removethis.decisive.com
Sr. Lead Engineer, Product Development
Decisive Technology Corporation
Mountain View, CA  94043

 Silvano

1) Installa Linux... :^)
2) Gią fatto....., ma necessito di win98......
	Silvano

Multiutenza su 98? Muhuhuhuhehehehahahahahahhhh..... in bocca al lupo!
Mi associo. :-P
Ciao
Andrea

Questo non č vero, mai avuto problemi
Beh, questo secondo le FAQ. Poi io personalmente uso Perl in genere su Unix
e cmq su macchine che fanno da server, indi per cui escludo Win 98 a
priori...
Ciao


Questo non è vero, mai avuto problemi
Neanch'io, per quel *poco* che fa rispetto a Unix.
------
bale...@dada.it
 
http://zap.to/balestra
  ICQ#:14303012
" Ora mai che i baci tuoi piu' non mi sazian
  cerchero' un'altra donna dentro ai sogni di Tarzan... "

1) Flock non funzia su Windows (qualsiasi) - non è implementato
*FUD* funziona perfettamente sotto NT.
__END__
# Aldo Calpini
print sort {$_{$a} cmp $_{$b}} values %{{split undef,
"xritajbugne fahokem csuctawer jhdtlrnpqloevkshpr"}};

*FUD* funziona perfettamente sotto NT.
Uau!!! Diciperdavvero???
Ti prego, dimmi comedove......


Ti prego, dimmi comedove......
come sotto unix, I suppose :-)
io l'ho provato con questo scriptino:
    use Fcntl qw(LOCK_EX LOCK_UN LOCK_NB);
    open(GHIGO, ">ghigo.txt") or die "can't open: $!\n";
    $rc = flock(GHIGO, LOCK_EX | LOCK_NB);
    if($rc == 0) {
        die "can't lock: $!\n";
    } else {
        print "file locked. press ENTER to unlock: ";
        $enter = <STDIN>;
        $rc = flock(GHIGO, LOCK_UN);
        close(GHIGO);
    }
apro 2 command prompt, lancio lo script da una parte,
lo lascio in attesa, lo lancio dall'altra parte e trovo
che il file è lockato ;-)


			Silvano
Ciao,
Se usi il per ActiveState dovrai usare il modulo Win32:::mutex, già
fornito con il linguaggio (se non sbaglio), che permette di gestire le
criticas Section. Se ti occupi di multitasking dovresti già sapere di
cosa parlo.
Dopo
require win32::mutex;
si deve dichiarare una variabile che sarà il semaforo preposto alla
gestione degli accessi ad una CS con
$mutex = Win32::Mutex->new([$initial, [$name]]) 
$initial può essere solo True o False se true allora oltre che la
creazione del semaforo viene effettuata anche una P() sullo stesso. Di
default $initial è False (solo creazione)
$name è il nome del semaforo. Se il semaforo è già stato creato da un
altro processo allora si utilizza quello già pronto senza crearne uno
nuovo.
L'istruzione precedente la prima riga di CS deve essere (ammettendo
che il semaforo si chiami $mutex)
$mutex -> wait; (che quivale,usando un'altra sintassi, a P($mutex))
e la prima istruzione dopo essere usciti dalla CS deve essere
$mutex -> release; (V($mutex))
Ho provato uno script che usa questo sistema su 95, 98 e NT e funziona
su tutti. Non so se esiste un sistema simile per Linux/Unix perchè
sono pigro e uso Flock che funziona benissimo.
Ricordati che ad OGNI wait deve corrispondere una release e che non è
igienico, non ho mai capito perchè, incrociare tra di loro wait e
release nidificati.
Spero di esserti stato d'aiuto
L'esposizione non sarà stata formalmente corretta ma l'importante è
che funzioni, vero?
Giacomo

io l'ho provato con questo scriptino:
A me da' "fatal error"
Ciao
Andrea

release nidificati.
Il problema e' dovuto al "deadlock" ossia  2 o piu' processi
concorrenti che si  possono bloccare a vicenda all' infinito.
Ccon la tua sintassi  ex da manuale :)
-------------------
PROCESSO A:
1 - P(semaforo1)
.......
2 - P(semaforo2)
 ------
--------------------
PROCESSO B:
1 - P(semaforo2)
......
2 . P(semaforo1)
------
-------------------
se i processi partono insieme e fanno un istruzione a testa (la
fortuna e' notoriamente cieca, ma la jella ha altrettanto notoriamente
11 decimi) si bloccano entrambi al passo 2 :(((((((((
Ancora 10'000 grazie e colgo l'occasione per salutare tutti coloro che
mi hanno risposto
			Silvano

11 decimi) si bloccano entrambi al passo 2 :(((((((((
Forse mi sono spiegato male, intendevo una sequneza di P e V nello stesso thread
del tipo
P(A)
.................
P(B)
..............
V(A)
................
V(B)
Il problema dei filosofi è chiarissimo anche a me :)
	Giacomo