Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Spori wxWidgets mutexi pod Windows-ima

[es] :: C/C++ programiranje :: Spori wxWidgets mutexi pod Windows-ima

[ Pregleda: 2044 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
195.222.97.*



+2789 Profil

icon Spori wxWidgets mutexi pod Windows-ima25.04.2008. u 11:50 - pre 194 meseci
Zanimalo me je koliko su operacije zaključavanja/otključavanja mutex-a brze i napravio jedno testiranje. Napravio sam for petlju sa samo dve naredbe: mutex.lock(); mutex.unlock();. Izmerio sam vreme potrebno za izvršavanje petlje, a potom izvršio istu petlju, ali sa praznim telom da bih znao koliko je vremena potrošila sama petlja. Na kraju sam dobio vrlo čudne rezultate. Koristio sam Qt-ovu klasu QMutex i wxWidgets-ovu klasu wxMutex pod operativnim sistemima Windows XP Home i Mandriva One 2008. Navodim izmerena vremena za dve uzastopne naredbe mutex.lock(); mutex.unlock(); u nanosekundama:



E, sad, mene zanima zašto se wxWidgets vuče pod Windows-ima ko prebijena mačka. Jesam li nešto pogrešio prilikom merenja? Sve je bilo Release itd.

[Ovu poruku je menjao Nedeljko dana 25.04.2008. u 17:22 GMT+1]
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

Ivan Dimkovic

Administrator
Član broj: 13
Poruke: 16687
*.dip.t-dialin.net.



+7173 Profil

icon Re: Spori wxWidgets mutexi pod Windows-ima25.04.2008. u 22:32 - pre 194 meseci
Mutexi (mislim bas na Win32 Mutex objekte) su u Windowsu relativno spori zato sto su system-wide objekti (a ne process-wide) i njihov menadzment zbog toga zahteva context-switcheve iz userlanda u kernel-mod - ako ti se threadovi izvrsavaju u istom procesu - znaci ne moras da sinhronizujes threadove iz razlicitih procesa, koristi kriticne sekcije koje su mnogo mnogo brze.

CreateCriticalSection(), EnterCriticalSection(), LeaveCriticalSection() su tvoji drugari - ako kod koristi mutexe, samo ih zameni sa kriticnim sekcijama :)

Pretpostavljam da je to u pitanju (posto onako veliki broj nanosekundi mirise na ring3->ring0 context-switch), ako nije - onda nesto pogresno radis, posto su kriticne sekcije vrlo "lake".

@edit - evo pogledao sam kod:

Citat:

wxMutexInternal::wxMutexInternal(wxMutexType WXUNUSED(mutexType))
{
// create a nameless (hence intra process and always private) mutex
m_mutex = ::CreateMutex
(
NULL, // default secutiry attributes
false, // not initially locked
NULL // no name
);

if ( !m_mutex )
{
wxLogLastError(_T("CreateMutex()"));
}
}


Dakle, koriste se Win32 Mutexi, sto je jako los izbor ako je u pitanju sinhronizacija threadova unutar procesa.

Cak su dali i komentar: (hence intra process and always private). Dakle, upotreba pogresnog nacina sinhronizacije - treba koristiti kriticne sekcije. Lepo pise u uputstvima za multithreaded programiranje na MSDN-u.

Zamena Win32 Mutexa sa Win32 kriticnim sekcijama je vrlo laka, posto je funkcionalnost enkapsulirana unutar klase wxMutexInternal, pa za ostatak koda uopste nece biti razlike, a osetices vrlo veliku razliku u brzini.

[Ovu poruku je menjao Ivan Dimkovic dana 25.04.2008. u 23:51 GMT+1]
DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1 Videos: http://www.digicortex.net/node/17 Gallery: http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! - https://github.com/psyq321/PowerMonkey
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.tekostolac.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Spori wxWidgets mutexi pod Windows-ima29.04.2008. u 07:06 - pre 194 meseci
Da. To za kriticne sekcije je vec u nekoliko navrata na ES-u bilo pominjano:
http://www.elitesecurity.org/t293094-0#1745579
(ovde je dat jedan od primera upakovan u RAII patern, a ima i mnogo slicnih po forumu)

Licno, mutexe koristim uglavnom za ispitivanje OnlyOneInstance programa, a korisni su i instalacionim procedurama jer mutex string koji im se kaze, koriste radi slicnih stvari.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Spori wxWidgets mutexi pod Windows-ima

[ Pregleda: 2044 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.