vont placer le processus parent et le processus fils dans un interblocage si le parent utilise la ressource et que l'enfant aura également la même ressource? Que faire si parent contient deux threads? l'enfant aura-t-il aussi 2 fils? Comment la fourche peut-elle être sécuritaire pour le fil?Certaines questions concernant les threads et les interblocages
Répondre
La description d'une phrase de Wikipedia est
Une impasse est une situation dans laquelle deux ou plusieurs actions concurrentes chacun attendant que l'autre à la fin, et donc ni jamais fait.
Le cas le plus simple est deux threads et deux ressources.
Fil A:
acquireResource(r1)
acquireResource(r2)
// Do stuff
releaseResource(r1)
releaseResource(r2)
Fil B:
acquireResrouce(r2)
acquireResource(r1)
// Do stuff
releaseResource(r1)
releaseResource(r2)
Avec ce blocage de code se produit si la séquence suivante d'événements se produit.
- Fil A acquiert r1
- changement de contexte de fil B
- fil B acquiert A ce moment Discussion A r2
ne peut pas continuer parce qu'il r2 est déjà propriétaire et le fil B peut ne pas procéder parce que r1 est la propriété. Par conséquent, aucun thread ne peut aller jusqu'au point où il libère ses ressources. Ceci est une impasse.
Pour ce que sa valeur de cas simples comme ceci peut être évitée en s'assurant que les ressources sont acquises dans le même ordre dans tout le code. Par exemple, si le thread B acquiert r1, aucun blocage ne se produira. Il y a beaucoup d'autres façons de parvenir à l'impasse, bien qu'il soit beaucoup plus difficile à éviter.
- 1. questions de débutant concernant les classes Python
- 2. quelques questions concernant les sessions php
- 3. Question de conception concernant les threads
- 4. Questions concernant PHP et mootools
- 5. Question concernant les dequeues et les tests
- 6. Deux questions concernant Scrum
- 7. Questions et réponses concernant le modèle Django
- 8. UIDatePicker questions concernant l'affichage
- 9. Questions concernant BlackBerry BrowserField2
- 10. Problèmes concernant Boost :: Python et Boost :: Threads
- 11. Quelques questions concernant JavaScriptSerializer
- 12. quelques questions concernant pthread_mutex_lock
- 13. Recherché: Liste de données suivant certaines règles concernant les dates
- 14. Questions concernant Entity Framework + DDD
- 15. et les questions effondrement
- 16. Python multiprocessing.Queue sur les interblocages PUT et obtenir
- 17. Acquérir un verrou sur deux mutex et éviter les interblocages
- 18. PyQT et les threads
- 19. obtenir et définir les questions
- 20. Questions générales concernant le langage Python
- 21. Ruby Enumeration et RETURN_ENUMERATOR - Questions concernant les Internes C de Ruby
- 22. Questions concernant le tableau vectoriel des structures
- 23. Questions concernant le traitement des SMS reçus
- 24. Peu de questions débutant concernant NSString
- 25. Questions concernant le programme de calcul Pi
- 26. Question concernant les bibliothèques et le cadre
- 27. Away3d et les événements (questions de base)
- 28. Toutes les interblocages sont provoqués par une mauvaise requête
- 29. Présentation des interblocages avec les notifications de requêtes SQL Server
- 30. Quelqu'un peut-il dissiper certaines inquiétudes concernant les différences de réplication entre Oracle et MS SQL Server?
C'est vraiment difficile à dire. Pourquoi n'essaies-tu pas de poser une question très précise et une seule ressource, et un scénario de partage? Certaines ressources peuvent être partagées. certains ne peuvent pas. Certains peuvent être partagés à certains égards, mais pas d'autres. Par exemple, la mémoire peut généralement être lue mais pas écrite simultanément sans synchronisation, tandis que la CPU est arbitrée pour vous par le système d'exploitation. – WhirlWind
Aussi, si vous croyez avoir reçu des réponses valables à vos questions, vous pouvez accepter une excellente réponse pour récompenser ceux qui ont fait des efforts pour vous aider. – WhirlWind