Threads, mutex, sémaphores &co.
9 sujets de 1 à 9 (sur un total de 9)
-
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)
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
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)
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.
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)
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 ».
And, for pre-Hyperion/OS4 doc :
http://gega.homelinux.net/AmigaDevDocs/lib_17.html
http://gega.homelinux.net/AmigaDevDocs/lib_21.htmlPrédateur Chess | Amiga 500 + ACA500 | Amiga 1200 + ACA1233
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.