On Oct 23 05:45, Johan De Taeye wrote: > > My multi-threaded application is creating a lot of > pthread_rwlock objects to protect access to my objects. > I am noticing that this doesn't scale up well. As the number > of active objects being created/changed/deleted increases > into the thousands, the runtime performance degrades very > badly. > > When investigating the problem I noticed from the source code > in the files winsup/cygwin/thread.h and > winsup/cygwin/thread.cc that a static double-linked list > (called rwlocks) is used to keep track of all rwlocks present > in the process. Removal of an element in the list is O(n) and > explains the behavior of my application. > > When compiling under Linux no such scalability problems are > found. (I believe the pthreads implementation there doesn't > need to keep track of the active rwlocks) > > Finally the question: Could/should the =list= data structure > be replaced with a =set= to provide better scalability?
Maybe, but http://cygwin.com/acronyms/#SHTDI. A patch which optimizes cases like this are always thoughtfully considered. If you're willing to help, have a look on http://cygwin.com/contrib.html. However, I'd think we shouldn't change this for the upcoming 1.5.19 release which already contains a lot more changes than we had in mind once. Corinna -- Corinna Vinschen Please, send mails regarding Cygwin to Cygwin Project Co-Leader cygwin AT cygwin DOT com Red Hat, Inc. -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/