[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 07/12] qemu-thread: add QemuSemaphore
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PATCH 07/12] qemu-thread: add QemuSemaphore |
Date: |
Mon, 16 Jul 2012 16:20:26 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:13.0) Gecko/20120615 Thunderbird/13.0.1 |
Il 16/07/2012 16:09, Jan Kiszka ha scritto:
> On 2012-07-16 16:03, Paolo Bonzini wrote:
>> Il 16/07/2012 15:53, Jan Kiszka ha scritto:
>>>>>
>>>>> qemu_cond_wait only uses WaitForSingleObject with INFINITE timeout, and
>>>>> the algorithm relies on that.
>>> I see. But this doesn't look complex awfully. Just move the waker
>>> signaling from within cond_wait under the mutex as well, maybe add
>>> another flag if there is really someone waiting, and that's it. The
>>> costs should be hard to measure, even in line of code.
>>
>> There is still a race after WaitForSingleObject times out. You need to
>> catch the mutex before decreasing the number of waiters, and during that
>> window somebody can broadcast the condition variable.
>
> ...and that's why you check what needs to be done to handle this race
> after grabbing the mutex. IOW, replicate the state information that the
> Windows semaphore contains into the emulated condition variable object.
It is already there (cv->waiters), but it is accessed atomically. To do
what you suggest I would need to add a mutex.
>> I'm not saying it's impossible, just that it's hard and I dislike
>> qemu_cond_timedwait as much as you dislike semaphores. :)
>
> As you cannot eliminate our use cases for condition variables, let's
> focus on the existing synchronization patterns instead of introducing
> new ones + new mechanisms.
I'm not introducing <fancy new primitive of the day>... semaphores have
the advantage of having better support under Windows (at least older
versions; Microsoft saw the light starting with Vista---yes I know the
oxymoron---and added condvars).
Paolo
- Re: [Qemu-devel] [PATCH 06/12] linux-aio: use event notifiers, (continued)
- [Qemu-devel] [PATCH 07/12] qemu-thread: add QemuSemaphore, Paolo Bonzini, 2012/07/16
- Re: [Qemu-devel] [PATCH 07/12] qemu-thread: add QemuSemaphore, Jan Kiszka, 2012/07/16
- [Qemu-devel] [PATCH] qemu-thread: Introduce qemu_cond_timedwait for POSIX, Jan Kiszka, 2012/07/16
- Re: [Qemu-devel] [PATCH 07/12] qemu-thread: add QemuSemaphore, Paolo Bonzini, 2012/07/16
- Re: [Qemu-devel] [PATCH 07/12] qemu-thread: add QemuSemaphore, Jan Kiszka, 2012/07/16
- Re: [Qemu-devel] [PATCH 07/12] qemu-thread: add QemuSemaphore, Paolo Bonzini, 2012/07/16
- Re: [Qemu-devel] [PATCH 07/12] qemu-thread: add QemuSemaphore, Jan Kiszka, 2012/07/16
- Re: [Qemu-devel] [PATCH 07/12] qemu-thread: add QemuSemaphore, Paolo Bonzini, 2012/07/16
- Re: [Qemu-devel] [PATCH 07/12] qemu-thread: add QemuSemaphore, Jan Kiszka, 2012/07/16
- Re: [Qemu-devel] [PATCH 07/12] qemu-thread: add QemuSemaphore,
Paolo Bonzini <=
- Re: [Qemu-devel] [PATCH 07/12] qemu-thread: add QemuSemaphore, Paolo Bonzini, 2012/07/24
[Qemu-devel] [PATCH 08/12] aio: add generic thread-pool facility, Paolo Bonzini, 2012/07/16
[Qemu-devel] [PATCH 10/12] raw: merge posix-aio-compat.c into block/raw-posix.c, Paolo Bonzini, 2012/07/16
[Qemu-devel] [PATCH 11/12] raw-posix: rename raw-posix-aio.h, hide unavailable prototypes, Paolo Bonzini, 2012/07/16
[Qemu-devel] [PATCH 12/12] raw-win32: add emulated AIO support, Paolo Bonzini, 2012/07/16
[Qemu-devel] [PATCH 09/12] block: switch posix-aio-compat to threadpool, Paolo Bonzini, 2012/07/16