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.:
struct game{
int id;
short active;
mutex *list_mutex;
mutex *item_mutex;
struct player *player1;
struct player *player2;
struct game *next;
struct game *previous;
};
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.