[so] intrebare quiz fire de executie

Sergiu Iordache sergiu.iordache at gmail.com
Wed Jun 24 22:23:02 EEST 2009


2009/6/24 Ioana Grigoropol <ioana.grigoropol at loopback.ro>:
>
>
> Sergiu Iordache wrote:
>>
>> 2009/6/24 Ioana Grigoropol <ioana.grigoropol at loopback.ro>:
>>
>>>
>>> Cum văd eu lucrurile, având în vedere că nu pot face wait decât pe o
>>> condiție, coada de waiters a fost numărată în plus pentru primul caz.
>>>
>>> Așadar,
>>> SIGNAL_AND_CONTINUE:
>>> - 2 * cond_queue + entry_queue = 3
>>> SIGNAL_AND_WAIT
>>> - 2 * cond_queue + entry_queue + signal_queue = 4
>>>
>>> Deci răspunsul era corect în quiz.
>>>
>>
>> Păi stai, și când faci broadcast unu se trezește dar restul unde așteaptă?
>>
>
> Când faci broadcast, faci pe o anumită condiție => lovești în coada asociată
> ei. Nu văd de ce ai avea nevoie de o coadă waiters pentru broadcast only.
>
> Sau cel puțin așa cred eu.

Nu, să presupunem următorul scenariu:
Ai 2 threaduri care așteaptă pe condiția 1 să zicem.
Al treilea thread intră în monitor și face broadcast. Fiind "signal
and continue" thread-urile ar trebui să se trezească. Problema e că
după cum se știe în monitor "nu are loc" decât un singur thread. Adică
cel care le-a trezit. Și chiar dacă cel care le-a trezit s-ar fi oprit
și el, tot doar un singur thread avea loc din cele 2. Prin urmare
restul trebuiau să aștepte undeva să fie trezite. Aici intervine coada
Waiting.

Sergiu


More information about the so mailing list