Path: csiph.com!x330-a1.tempe.blueboxinc.net!newsfeed.hal-mli.net!feeder1.hal-mli.net!weretis.net!feeder1.news.weretis.net!news.albasani.net!.POSTED!not-for-mail From: BGB Newsgroups: comp.lang.c,comp.programming.threads,comp.unix.programmer Subject: Re: POSIX threads hard to implement in Windows Date: Wed, 03 Aug 2011 07:32:11 -0700 Organization: albasani.net Lines: 42 Message-ID: References: <97ek3iFq2bU2@mid.individual.net> <4e13c801$0$20925$a729d347@news.telepac.pt> <4e13d4a7$0$20921$a729d347@news.telepac.pt> <37pfe8-4gl.ln1@jones.homeip.net> <97mi1gFbcvU4@mid.individual.net> <487c17t7h0f64f1mjmm83gj5f080o56cfa@4ax.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Trace: news.albasani.net lJ500u9jVaTRLMgIHkwuTOJ6cP0rouOez8lMsOGJG1iW5K+X2EQ3uvaUGXEzLG2xbN+bQ3/uJ+Dz8JtRuhaQoA== NNTP-Posting-Date: Wed, 3 Aug 2011 14:36:51 +0000 (UTC) Injection-Info: news.albasani.net; logging-data="ju+vP/U8uXH2aWF83QXYeMhqnkX5zoY4020A2Rxs3UwWkfkmadjteryJ6qGv15khkYftjgMACpFBW7usQgsX27Y1HNRi4uWLrh77BxwzwfOmQyBFAJaaJ8QCrr3Xs3I5"; mail-complaints-to="abuse@albasani.net" User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20110624 Thunderbird/5.0 In-Reply-To: Cancel-Lock: sha1:BbpueZItqk63sh2d0XLKD64A5QE= Xref: x330-a1.tempe.blueboxinc.net comp.lang.c:9006 comp.programming.threads:485 comp.unix.programmer:1053 On 7/7/2011 7:12 PM, MikeP wrote: > Robert Wessel wrote: >> On Fri, 08 Jul 2011 08:07:30 +1200, Ian Collins >> wrote: > >>> Does the windows API support process shared mutexes? The C1x >>> proposal doesn't include them probably because the process model is >>> beyond the C standard. >> >> >> Sure. Most of the synchronization objects in Windows are system wide. > > CAN be. If you name them, THEN they can be used amongst processes. > Unnamed synch objects are intra-process. Whether having unnamed synch > objects makes them lighter-weight (higher performance) in usage, I don't > know. Simple enough to profile though. > these mutexes are very expensive, almost absurdly slow. a lock/unlock cycle takes around 1-2us, which is far longer than most operations one may reasonably want to lock (on a reasonably modern computer, this is around 3000 to 6000 clock cycles). "Critical Sections" are a bit faster, and so are preferable to the generic mutex objects (but, much faster than dead slow is still not necessarily fast). much faster IME was to implement a spinlock-with-sleeep operation (using "InterlockedExchange", ...), which can generally handle locking/unlocking in the low ns range (more around 5ns or so). the above fast mutexes make a lot more sense when ones' goal is something like: lock mutex; add entry to cross-thread linked list (such as a message queue); unlock mutex. or: the corresponding action to remove something from a linked-list. rather than... whatever the hell MS intends their mutexes for...