Threads, mutex, sémaphores &co.

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

  • Eggman

      #199565

      Je tâte de la programmation concurrente en C, dans sa version POSIX pour bonne part, et je me demande comment c’est implémenté sous AmigaOS et où chercher de la doc.
      Quelqu’un pour m’éclairer ?

      Je cherche pour l’instant surtout de la doc pour le classic, parce que je peux tester la chose.
      Merci d’avance.

      « Les cons ça ose tout, c’est même à ça qu’on les reconnaît » (Michel Audiard)

      Jul

        #199566

        a priori, sous AmigaOs ce sera un système de sémaphores, les threads étant plus récents (je crois qu’ils ont été formalisés en 1990/1991). Plus anciens sont les processus (et plus complexes à mettre en oeuvre, sans compter qu’ils ont leur systèmes d’adressage indépendant qu’on ne peut pas mutualiser). Si tu veux apprendre à programmer threads et processus, je te conseille vraiment ce livre, que je possède et qui m’a appris une foultitude de trucs géniaux sur plein de sujets :

        (J’ai récemment réécrit mon jeu d’échecs, le passant de pascal objet à objective C, puis carrément en c, et j’en ai profité pour le rendre multi-threads pour lui faire profiter de tous les coeurs de mon i7). a noter que je programme sous OSX, et que j’ai le choix de deux autres technologies, non existante sous Linux : Grand Central Dispatch et les threads propres à OSX, plus anciens que les pthreads de Linux, puisqu’hérités de Next Step, mais aussi plus simples et plus rapides. Malheureusement aucune de ces technologies n’existe sous Linux ou Windows, et il vaut donc mieux s’en tenir sagement aux pthreads si on fait une appui portable).

        Prédateur Chess | Amiga 500 + ACA500 | Amiga 1200 + ACA1233

        Eggman

          #199567

          Je pense que j’ai mal formulé ma requête. Je cherche des infos sur le multi-tâche, sous AmigaOS. Je cherche surtout à comprendre ce qu’il y a à disposition au niveau technique pour mettre en œuvre de la concurrence et comment ça fonctionne.

          « Les cons ça ose tout, c’est même à ça qu’on les reconnaît » (Michel Audiard)

          Yomgui

            #199600

            Eggman:

            Sous AmigaOS il n’y a pas de processus, que des tâches: c’est la première chose à comprendre.

            Attention: bien qu’il existe « CreateProc » ( ou »CreateNewProc » sous MOS), ce ne sont pas des « process » au sens POSIX, juste des « super-tâches » ayant un lien avec la dos.library.

             

            Donc je disais, pour créer des tâches on utilisera l’API  mentionnée précédemment ou bien dans exec « CreateTask » (ou « NewCreateTask » sous MOS) pour des tâches n’ayant pas besoin de console (printf?) ou d’accès à la dos.library en général.

             

            Puis vient les IPCs: AmigaOS est basé sur les signaux et les queues de messages: on utilisera « Wait »  pour attendre un signal créé par « AllocSignal » ou bien venant d’un port de message (créé par « CreateMsgPort »).

            On déposera des message sur le port avec « PutMsg » et on les lira avec « GetMsg »

             

            La protection de données et le synchronisme se fait avec les sémaphores. « InitSemaphore » sera utilisé pour initialiser une structure de type « SignalSemaphore », puis « ObtainSemaphore » et « ReleaseSemaphore » pour prendre/relacher celui-ci.

            Voilà une très rapide et brève introduction.

            Eggman

              #199601

              @Yomgui:

              Merci ! Pour les précisions.

              Sous AmigaOS il n’y a pas de processus, que des tâches: c’est la première chose à comprendre.

              J’aurais dû m’en douter… C’est ça de poser des questions à moité endormi…

              De façon générale, on peut trouver où la doc sur le sujet ?

              « Les cons ça ose tout, c’est même à ça qu’on les reconnaît » (Michel Audiard)

              Alex

                #199602

                @Eggman

                Tu trouveras toutes les API dans les autodocs de Exec, sinon sur le wiki officiel d’AmigaOS (http://wiki.amigaos.net/index.php/Kernel) particulièrement les tâches (http://wiki.amigaos.net/index.php/Exec_Tasks), les sémaphores (http://wiki.amigaos.net/index.php/Exec_Semaphores) et les mutex (http://wiki.amigaos.net/index.php/Exec_Mutexes).

                L’approche de YomGui est intéressante, en effet en utilisant le terme « tâche » ça évite de polluer l’esprit de l’auditeur avec des notions qu’il voudrait tout de suite rattacher à d’autres termes.

                Moi j’avais coutume de dire que sous AmigaOs il n’y avait que des « processus » mais qui partagent le même espace d’adressage mais par contre qu’il n’y a pas de « thread ».

                Jul

                  #199604

                  And, for pre-Hyperion/OS4 doc :

                  http://gega.homelinux.net/AmigaDevDocs/lib_17.html
                  http://gega.homelinux.net/AmigaDevDocs/lib_21.html

                  Prédateur Chess | Amiga 500 + ACA500 | Amiga 1200 + ACA1233

                  Yomgui

                    #199606

                    @Alex: sous MOS c’est encore plus vrai, car toutes les tâches sont en faite des « threads » d’un processus unique qui abstrait la ABox… donc des processus au sens POSIX existent sous MOS, mais ils ne sont pas accessibles sous ABox.

                    Eggman

                      #199618

                      \o/ MERCI!
                      Je sens que je vais bien m’amuser !
                      Je ne vous embrasse pas, mais le cœur y est ! 😉

                      « Les cons ça ose tout, c’est même à ça qu’on les reconnaît » (Michel Audiard)

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

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

                    Forums AmigaOS, MorphOS et AROS Développement Threads, mutex, sémaphores &co.

                    Amiga Impact