Device Manage for OS/2

DevCon for OS/2 - Developer Connection

Operating systems:
ArcaOS, eComStation, IBM OS/2 Warp
Мифы о eComStation 

(Unsorted)  
 
 
Compilers  
 
 
Tools  
 
 
User Interface  
 
 
REXX  
 
 
Drivers/kernel  
 
 

 

 

WinRequestMutexSem()

Классический дидлок - это два мютекса, захват которых производится в разных нитках в разном порядке. Будет проблема. Выход - всегда захватывать в одном порядке. Но вот проблема, использование WinSendMsg как бы добавляет второй неявный мютекс, т.е. если между захватом и освобождением мютексов юзается WinSendMsg, то тут порядок такой - захват мютекса, потом захват неявного мютекса очереди, а если вызов произошел из обработчика очереди - то сначала захват мютекса очереди, потом захват мютекса нужного ресурса. классический дидлок

Конечно, если между захватами нету сендов, то не страшно. Но кто в большой программе сможет такое гарантировать? WinRequestMutexSem пытается захватить укзанный мютекс, не захватывая очередь. Т.е. если еще одна нитка сделает send - он пройдет. Только post будет накапливаться. Работает он с той же скоростью что и обычный.

Вывод - во всех PM апликухах от греха подальше заменить DosRequestMutexSem на WinRequestMutexSem.

(thx Glassman)

 


 

(C) OS2.GURU 2001-2024