Bonjour
J'ai écrit ce bout de code mais j'obtiens une exception index is outside the bound of the array
merciCode:
1
2
3
4
5
6 Parallel.For(0, 1000, Sub(i) For j As Int64 = 0 To i list.Add(i + j) 'l'erreur pointe sur cette ligne Next End Sub)
Version imprimable
Bonjour
J'ai écrit ce bout de code mais j'obtiens une exception index is outside the bound of the array
merciCode:
1
2
3
4
5
6 Parallel.For(0, 1000, Sub(i) For j As Int64 = 0 To i list.Add(i + j) 'l'erreur pointe sur cette ligne Next End Sub)
on ne peut pas tout faire en parallèle
ce n'est possible qu'avec des classes qu'on appelle thread safe, c'est à dire que les membres peuvent être appelés simultanément depuis plusieurs threads
les 3/4 des classes du framework ne sont pas thread safe (c'est précisé dans msdn en haut ou en bas de la page de chaque classe si c'est threads safe ou pas)
on peut en recoder des threads safes si nécessaire, mais ici ca perdrait plus de temps de synchroniser les threads que ca n'en gagnerait
parce qu'il y aussi une question d'utilité dans le multi threading, .add dans un list est quelque chose de plus que rapide, donc le paralléliser ne sert à rien
ca devient utile quand c'est des tâches assez longues (plusieurs ms, là on est dans l'ordre de la nanoseconde), ou des instances séparées
le principe du thread safe c'est d'utiliser des lock (synclock, readerwriterlockslim ...) pour empecher que des choses qui ne devrait pas être faites en même temps ne le soit, en faisant attendre des threads pour que la ressource soit dispo, donc c'est une perte de temps potentielle
Merci pour les expliquations
Citation:
mais ici ca perdrait plus de temps de synchroniser les threads que ca n'en gagnerait
parce qu'il y aussi une question d'utilité dans le multi threading, .add dans un list est quelque chose de plus que rapide, donc le paralléliser ne sert à rien