@"m@c"
Nisam iskopirao celu funkciju, postavlja se na true ispod poziva if(!pthread_create(&m_pid,&atrib,Thread.ThreadFunc,this)), gde sam stavio samo tri tackice da bih skratio. Prebacio sam to, nešto kasnije, u ThreadFunc.
Ponovo sam razmislio i mozda su ipak oni mutexi višak, m_isRunnig se deli izmedju dve niti, nit koja poziva CreateThread i nit koja se nalazi iza Thread objekta. Kritican je samo onaj trenutak kada m_isRunning prelazi iz true u false odnosno kada nit(ona iza objekta) zavrsava s radom. Program koji bi zavisio od trenutka poziva funkcije CreateThread, a da nije siguran da je nit zavrsila, u svakom slucaju ne bi radio kako treba. Trebao bih da izbacim exception ako se CreateThread pozove više od jednom a stanje Thread objekta da vežem za život niti koju delegira (da mu promenim stanje u recimo finshed za detached thread i recimo zombie za joinable).
Ipak, zanima me da li uvek treba štititi promenljive muteksima(mislim na atomske promenljive) ako se dele između dve niti?
Code:
if(atomskaPromenljiva)
ovo nije atomska operacija, jel tako ? Jer se prevodi u
Code:
cmp atomskaPromenjliva,0
je nekaInstrukcija
P.S
Izvinjavam se zbog konfuznog pisanja, posledica razmišljanja o konfuznom multithreading-u :)