On 01/03/13 13:20, Roman Nádhera:

Zkus, prosim, quotovat trochu umirneneji. A taky jsem se vratil k puvodnim o neco lepsimu subjektu.

chc pouzit fumkce critical_enter(void); a critical_exit(void);
Tak to pri prekladu vysype hromadu chyb.

critical_enter()/critical_exit() jsou funkce dostupne v jadre, nikoliv v

No, nejsem si jisty, ani nepisu kernelovy modul. Jen aplikaci, kde do
jedne sdilene pameti kafraji dva procesy

No to sis ale vyhlednul prilis silny nastroj (i kdyby sel pouzit). To ze potrebujes vzajemne synchronizovat dva procesy neni dobrym duvodem zablokovat i vsechny ostatni


sekce, ale treba mutex (pouzivam ve Woknech, ale tady s tim je stejny
problem). Proste jakykoliv mechanismus, ktery zabrani modifikaci ve
sdilene pameti po dobu nejake operace.

Proste potrebujes nejakou formu zamkovani. Napriklad flock (+varianty jako lockf nebo fcntl) nebo semafory (man 4 sem).


(Jo, takove RPP-16, tam sel semafor udelat jedinou strojovou instrukci)

Ta instrukce se na i386 jmenuje LOCK CMPXCHG. Nejakou takovou potrebuje kazdej procesor, kterej ma byt pouzitelnej v multiprocesorovejch sestavach. V tom rozdil neni.

Myslim, ze to privilegovana instrukce neni, takze ano, je to mozna dalsi zpusob jak to cele navleknout - ve sdilene pameti si pomoci LOCK CMPXCHG semafory naimplementovat sam.

Ale pouziti systemovych primitiv ma oproti primemu pouziti procesorovych instrukci vyhodu nezavislosti zdrojoveho kodu na cilovem procesoru.


Dan





--
FreeBSD mailing list ([email protected])
http://www.freebsd.cz/listserv/listinfo/users-l

Odpovedet emailem