DevCon for OS/2 - Developer Connection |
Operating systems: ArcaOS, eComStation, IBM OS/2 Warp |
|
|
WinRequestMutexSem()
Классический дидлок - это два мютекса, захват которых производится в разных нитках в разном порядке. Будет проблема. Выход - всегда захватывать в одном порядке. Но вот проблема, использование WinSendMsg как бы добавляет второй неявный мютекс, т.е. если между захватом и освобождением мютексов юзается WinSendMsg, то тут порядок такой - захват мютекса, потом захват неявного мютекса очереди, а если вызов произошел из обработчика очереди - то сначала захват мютекса очереди, потом захват мютекса нужного ресурса. классический дидлок Конечно, если между захватами нету сендов, то не страшно. Но кто в большой программе сможет такое гарантировать? WinRequestMutexSem пытается захватить укзанный мютекс, не захватывая очередь. Т.е. если еще одна нитка сделает send - он пройдет. Только post будет накапливаться. Работает он с той же скоростью что и обычный. Вывод - во всех PM апликухах от греха подальше заменить DosRequestMutexSem на WinRequestMutexSem. (thx Glassman) |
|
||
(C) OS2.GURU 2001-2024