|
Message-ID: <alpine.LNX.2.11.1504052217310.8195@monopod.intra.ispras.ru> Date: Sun, 5 Apr 2015 23:03:34 +0300 (MSK) From: Alexander Monakov <amonakov@...ras.ru> To: musl@...ts.openwall.com Subject: Re: Resuming work on new semaphore On Sun, 5 Apr 2015, Rich Felker wrote: > 1. Thread A enters sem_wait. > 2. Thread B observes thread A in sem_wait via failed sem_trywait. Hm, I don't see how that can be achieved. As a result I'm afraid I didn't fully understand your example. > > Well we can make sem_getvalue return val[0]+val[1] instead... ;) > > That just makes the new implementation look like the old one, no? :-) Can't be bad if it behaves the same but works a bit faster. Apropos, like I've said on IRC, looks like there's "semaphore uncertainty principle": that formal semaphore value is between val[0] and (val[0] +/- val[1]) (clamped to 0 as needed). It seems you can either do your hack and pretend that there are never any waiters, or try to faithfully count waiters in sem_getvalue, but then also reveal that sometimes the implementation works by stealing a post. I believe you could argue that the latter is explicitely disallowed by the spec. By the way, I think there's an interesting interplay with cancellation. Consider the following. Thread B does "return sem_wait(sem);". Thread A does: pthread_cancel(thread_B); sem_post(sem); sem_getvalue(sem); If it observes semaphore value as 1 it follows that thread B has not become a waiter yet, and since it must have cancellation already pending, it may not consume the post. And yet if thread B is already futex-waiting in sem_wait, consuming the post takes priority over acting on cancellation. So if then thread A does pthread_join(thread_B); sem_getvalue(sem); and gets value of 0, it sees a contradiction. And return value from pthread_join will indicate that thread_B exited normally rather than was cancelled. And on the contrary, if you make acting on cancellation/timeout take priority, you can observe semaphore value increasing when waiters leave the wait on error path without consuming the post. Alexander
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.