Sémaphores étranges

3 sujets de 1 à 3 (sur un total de 3)

  • Gofromiel

      #2608

      Yo tous, je viens de trouver un truc bizzare avec les sémaphores. Imaginons que j’obtienne un sémaphore en accés partagé avec ObtainSemaphoreShared() pour lire une liste, de temps en temps je dois y écrire et à ce moment là j’utilise ObtainSemaphore() pour bloquer la liste à toute autre tâche en ayant toujours ObtainSemaphoreShared() actif.

      Ma question la voici: comment se fait-il que ObtainSemaphore() bloque l’application si ObtainSemaphoreShared() est toujours actif, sachant que ma tâche est la seule à jouer avec le sémaphore. Est-ce un bug ? Pourquoi ne puis-je pas passer d’un état « partagé » à un état « privé » si aucune autre tâche n’a bloqué le sémpahore…

      Si quelqu’un a une solution, parce que j’en ai marre de réécrire tout le système.

      Henes ?

      Fab1

        #51389

        De ce que je comprends de l’autodoc, il faut que tu libères les sémaphores partagés d’abord avant de tenter l’accès exclusif : « Any exlusive locker will be held off until all shared lockers

        release the semaphore ».

        Mais apparemment tu dis qu’aucune autre tâche ne le possède à ce moment, donc c’est pas ça…

        Sinon je lis aussi :

        « A task owning a shared lock must not attempt to get an exclusive

        lock on the same semaphore. »

        Serait-ce ça ton problème ?

        Gofromiel

          #51390

          Ui c’est ça !! C’est pénible d’avoir à jongler comme ça. Mais je crois qu’il y a pas trop de solution, a part virer l’accés partagé et n’utiliser que l’accés exclusif. Dommage. Jvais voir comment ça se passe sous Unix…

          Merci Fab !

        3 sujets de 1 à 3 (sur un total de 3)

        • Vous devez être connecté pour répondre à ce sujet.

        Forums AmigaOS, MorphOS et AROS Développement Sémaphores étranges

        Amiga Impact