[ Nedeljko @ 25.04.2008. 11:50 ] @
[ Nedeljko @ 25.04.2008. 11:50 ] @
[ Ivan Dimkovic @ 25.04.2008. 22:32 ] @
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] [ X Files @ 29.04.2008. 07:06 ] @
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. Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|