

C - synchronizace vlaken nad spojovym seznamem
Ahoj, mam spojovy seznam ze struktur a 10 vlaken, ktere se spojakem pracuji. Nekdy jen nejake, nekdy vice, nekdy mene - neni ted dulezite. Jde mi o to, ze musim nejakym zpusobem zamykat ten spojak, aby mi do nej (jako do kriticke sekce) nelezlo vice vlaken.
Jenze - prijde mi blbost zamykat uplne cely spojak, kdyz chce jedno vlakno prepsat pouze jednu hodnotu v jedne strukture.
Lze nejakym zpusobem zamknout pouze tu jednu konkretni strukturu?
Struktura
struct game{
int id;
short active;
struct player *player1;
struct player *player2;
struct game *next;
struct game *previous;
};
Každá položka bude mať svoj vlastný zámok, ktorý budeš používať na synchronizáciu práce práve s tou jednou položkou. Okrem toho, budeš mať jeden spoločný zámok pre prácu so zoznamom (pridávanie, uberanie, iterovanie).
Čiže napr.:
Pri vytváraní prvej položky zoznamu vytvoríš zámok list_mutex, ktorý pri pridávaní ďalších položiek budeš kopírovať tým položkám. Pri vytváraní každej položky si vytvoríš nový zámok item_mutex.
To je lepsi reseni nez jsme vymysleli (kolega vymyslel) predtim... Diky.