On Thu, Apr 4, 2013 at 8:18 PM, Weeble <clockworksa...@gmail.com> wrote:

> I was looking at SemaphoreSlim because it seemed to be causing us
> trouble. I think I identified our problem and submitted it as bug
> 11598: https://bugzilla.xamarin.com/show_bug.cgi?id=11598
>
> However, beyond the issue I describe there, I'm a bit unsure about a
> few aspects of the implementation. Could anybody look at it and tell
> me whether my concerns are warranted?
>
>
> https://github.com/mono/mono/blob/master/mcs/class/corlib/System.Threading/SemaphoreSlim.cs
>
> 1. It's not clear what benefit it has over Semaphore. In .NET - as I
> understand it - the point of SemaphoreSlim is that in the case of low
> contention it doesn't actually use a WaitHandle and so avoids
> expensive calls into the kernel. It's only as a last resort that it
> actually allocates a WaitHandle and blocks on it. However, Mono's
> SemaphoreSlim always allocates a ManualResetEvent up-front, and
> signals it on every Release. Doesn't a ManualResetEvent have a kernel
> object and involve a context switch to signal it? Doesn't this nullify
> the only benefit of SemaphoreSlim over Semaphore?
>

Yes, looks like our implementation could use some optimization.


2. I don't understand the logic to decide how long to block for after
> spinning has failed. It seems to wait between 1 and deepSleepTime(=20)
> milliseconds. If a timeout has been specified it waits for the event
> until the timeout expires, clamped between 1 and 20 milliseconds. If
> no timeout has been specified (millisecondsTimeout=-1) it seems to
> always wait 1 millisecond. It seems that it would make more sense in
> that case to wait for the longest time possible, not the shortest.
> Have I misunderstood the code?
>

Yes, it's confusing.



> 3. I don't understand why it sets an upper limit on the wait time at
> all. Is that the only way to support cancellation tokens? If no
> cancellation token were provided, would it be better to wait as long
> as possible?
>

Yes, probably. Other optimizations for this are posible too.
_______________________________________________
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list

Reply via email to