[so] Exercitiul 3 - cursul 3 Procese

Cosmin Ratiu cosminratiu at gmail.com
Thu Sep 3 16:45:42 EEST 2009


On Thu, Sep 3, 2009 at 4:25 PM, ana-maria lepar <amylepar at gmail.com> wrote:

> Salutare,
>
> Mi-ar putea explica si mie cineva, va rog, exercitiul 3 (slideul 53) de la
> cursul 3 de Procese
> http://cs.pub.ro/~so/index.php?section=Cursuri&file=03.%20Procese<http://cs.pub.ro/%7Eso/index.php?section=Cursuri&file=03.%20Procese>
> Enuntul suna asa:
> Ce problema poate aduce urmatorul program si cum poate fi solutionati?
> static int flag = 0;
> static void sig_handler (int signum)
> {
> flag = 1;
> }
> int main (void)
> {
> if (signal (SIGUSR1, sig_handler) == SIG_ERR) {
> perror ("signal");
> exit (EXIT_FAILURE);
> }
> /* wait for signal */
> if (flag == 0)
> pause ();
> /* do work */
> ...
> return 0;
> }
>

Corect e
while (flag == 0)
  pause();
pt ca daca pui doar if se poate sa iti vina alt semnal decat cel asteptat.

In plus, se poate intampla un race: daca semnalul vine intre if si pause,
progamul o sa iti ramana blocat. Asta presupun ca se poate rezolva cu un
sleep periodic + while de mai sus, dar nu am folosit ceva de genul
niciodata, asa ca nu imi dau seama daca e bine sau nu.

Cosmin.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so/attachments/20090903/3d35c20f/attachment.htm>


More information about the so mailing list