Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: sekcja krytyczna
Forum PHP.pl > Forum > PHP
abusiek
Witam!

Mam problem z zaimplementowaniem dostepu do sekcji krytycznej i brak dobrego pomyslu jak go rozwiac. Rzecz polega na dwuetapowym dobieraniu fotografii do kategorii (tzn najpierw wybieramy fotografie, strona sie przeladowuje, wybieramy kategorie).

Fotografie przeglada wiele osob jednoczesnie i chodzi o to zeby dwie osoby nie mogly przejsc jednoczesnie do drugiego etapu z ta sama fotografia.
Fotografie sa pobierane z bazy, maja pole status i mozna je ustawiac po pierwszym etapie, ale to nie rozwiazuje problemu.

Z kolei typowe algorytmy rozwiazywania problemu sekcji krytycznej zakladaja dostep do zmiennych wspoldzielonych przez procesy w celu roztrzygniecie ktory wchodzi do sekcji, a takie zmienne sa nie do osiegniecia w www (plik? ale tu tez trzeba kontrolowac dostep...)

Moze macie jakis pomysl jak to rozwiazac?
rybik
nie bardzo rozumiem, czemu nie wystarczy status w bazie, jeżeli drugi user wybierze zablokowana fotkę to przekierujesz go spowrotem do wyboru fotek aktualizując listę dostępnych

jeżeli opcja z baza danych z jakichs przyczyn (nie jestem fachowcem) odpada to pozostaje blokada pliku, żeby uniknąć ryzyka wynikającego z czasu między fopen i flock można użyć pliku/katalogu semafora. Wybór pliku sprawdza czy jest semafor i próbuje go blokować, jak sie uda to zdjecie sprzedane smile.gif jak nie może blokować lub zablokowany to wraca do zdjęć

takie akademickie rozwiązanie smile.gif nie krzyczcie jak bredzę
abusiek
Poniekad sam sobie odpowiedziales

Cytat
uniknąć ryzyka wynikającego z czasu między fopen i flock


Tak samo moze byc z baza i updejtem/odczywaniem statusu.

Ale tak sobie mysle ze mieszanka statusu i flock() powinna byc wystarczajaco silna smile.gif

Podsumowujac dzieki smile.gif
rybik
gdzieś czytałem, że napewniejsze jest stosowanie katalogów jako semaforów , operacje atomowe itp, ważne jest też sprawdzenie systemu plików, sporo ciekawostek znajdziesz na http://pl2.php.net/flock
SirZooro
Jeżeli korzystasz z bazy danych to użyj składni SELECT ... FOR UPDATE. Tutaj jest opis tej składni dla MySQL: http://dev.mysql.com/doc/refman/5.0/en/inn...king-reads.html
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.