Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno 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;
};
Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Každá položka bude mať svoj vlastný zámok, ktorý budeš používať na synchronizáciu práce práve s tou… nový
los 10.01.2014 08:28
los
To je lepsi reseni nez jsme vymysleli (kolega vymyslel) predtim... Diky. poslední
freez2 10.01.2014 10:48
freez2

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.

Zpět do poradny Odpovědět na původní otázku Nahoru