Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 10 odgovora
  • 4.624 pregleda

Najnovija ↓

Sinhronizacija dva programa 31.03.2005. u 14:30 · pre 262 meseca #1
Pokusavam da naprvim cgi.exe program koji će raditi sa SQLITE bazom podataka u C-u.
Čitao sam nešto o sinhronizaciji odvojenih procesa u dokumentaciji SQLITE baze ali on govori o dva threda and ne o dve instance istog ili različitih programa koji pristupaju istom DB fajlu.

Da li postoji neki Widnows-ov mehanizam za sinhronizaciju programa.

Znam za sinhronizaciju thred-ova pomocu CreateSemaphore ili CriticalSection. Da li postoje neke funkcije za sihronizaciju programa?

Pozdrav,
Ljubiša Knežević
Potpis
http://www.padfm.com
Re: Sinhronizacija dva programa 31.03.2005. u 14:47 · pre 262 meseca #3
Koliko sam shvatio, SQLITE pravi lock nad fajlom, ja bih mogao da pravim lock nad nekim drugim fajlom, pa da poslje provjeravam da li je fajl zaključan ali sam se nadao da postoji neki Windows-ov ugrađeni mehanizam koji bi dodjeljivao pravo poziva sqlite.dll prema tome ko je prvi zatrazio.



Potpis
http://www.padfm.com
Re: Sinhronizacija dva programa 31.03.2005. u 17:03 · pre 262 meseca #4
Stvarno se ne razumem u SQLITE, i nisam siguran da li postoji neki
ugrađeni mehanizam za takvo nešto. Zato su (pored ostalog) i smisljeni
serveri - da klijenti komuniciraju sa serverom (EXE-om), a ne direktno
sa datotekama.

Dakle, kada jedan server upravlja upisima, onda kao što si rekao -
semafori i kriticne sekcije igraju kljucnu rec.

U tvom slucaju mozes da improvizujes. Napravi nekakav 'Retry mehanizam'
koji bi cekao neko vreme da se datoteka oslobodi - a onda po filmu -
"a sad malo ona". I sve tako.

Mislim da nema druge.
Re: Sinhronizacija dva programa 31.03.2005. u 21:09 · pre 262 meseca #6
Izgleda da ipak nije :(

Pokušao sam sa: hmutex = CreateMutex(&sca,TRUE,"TestSynchroMutex")
Dalje u programu imam test da li je hmutex NULL ili ne.
Program nakon kreiranja mutexa spava 5 sekundi a onda oslobadja mutex.

Kada paralelno pokrenem više instanci istog programa, svi vrate normalan HANDLE na kreirani mutex.

Očekivano ponašanje bi bilo da samo prva instanca programa kreira mutex dok druge treba da da vrate null i GetLastError treba da vrati ERROR_ALREADY_EXISTS.

Ili ovo funkcionise drugacije ili se mora korisiti nešto drugo za sinhronizaciju programa.

U svakom slučaju hvala za link. Našao sam tamo i link o svim sinhronizacionim metodama pa možda "iščačkam" nešto što bih mogao iskoristiti.






Potpis
http://www.padfm.com
Re: Sinhronizacija dva programa 31.03.2005. u 21:50 · pre 262 meseca #7
Nasao sam!

CreateWaitableTimer vraca ERROR_ALREADY_EXISTS poslje poziva GetLastError() ako je neki proces vec kreirao CreateWaitableTimer sa istim imenom!

Mozda postoji jos neki nacin za "interprocess synchronization"

Pozdrav,
Ljubisa
Potpis
http://www.padfm.com
Re: Sinhronizacija dva programa 01.04.2005. u 12:38 · pre 262 meseca #8
Može i mutex samo što vlasništvo nad mutexom dobijaš kad ti WaiForSingleObject nad hendlom od mutexa vrati WAIT_OBJECT_0. Na kraju moraš da pozoveš ReleaseMutex da bi oslobodio vlasništvo nad mutexom.
Re: Sinhronizacija dva programa 01.04.2005. u 14:44 · pre 262 meseca #10
http://www.codeproject.com/threads/sync.asp

Kad kreiras mutex mozes da mu das ime. To ime je jedinstveno u sistemu, kao sto je i taj mutex jedinstven u sistemu. Moze da ima vise hendlova na njega, ali to je i dalje samo jedan mutex. Ono sto je bitno je kome mutex trenutno pripada. Da bi dobio vlasnistvo nad mutexom koristis WaitForSingleObject. Da bi oslobodio vlasnistvo nad mutexom koristis ReleaseMutex. Posmatraj mutex kao kriticnu sekciju, sa sledecim analogijama:

InitializeCriticalSection = CreateMutex
EnterCriticalSection i TryEnterCriticalSection = WaitForSingleObject
LeaveCriticalSection = ReleaseMutex
DeleteCriticalSection = CloseHandle
Re: Sinhronizacija dva programa 04.04.2005. u 14:47 · pre 262 meseca #11
Hvala mislim da sam shvation kako rade mutex-i.

Pokusacu ovo ali sam u medjuvremenu otkrio da ugradjeni mehanizam sqlite-a je dovoljan da zadrzi jedan proces u "busy" modu dok drugo upisuje u bazu.

Obzirom da ce se svi inserti updates desavati u par milisekundi ovo bi trebalo biti dovoljno.

Pozdrav,
Ljubisa Knezevic
Potpis
http://www.padfm.com
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme