J'ai deux tranches qui sont transmises par une autre méthode :
fn example<T>(a1: &[T], a2: &mut [T]) {}
Je veux traiter a1
avec plusieurs fils d'exécution, puis écrire dans a2
en utilisant totalement arbitraire qui ne sont connus que lors de l'exécution de chaque thread. Mon algorithme garantit que les indices sont mutuellement exclusifs Il n'y a donc pas de course aux données.
Le vérificateur d'emprunts n'aime pas partager les références mutables entre les threads, car il ne connaît pas la garantie offerte par notre algorithme. J'obtiens également un lifetime 'static required rustc (E0621)
erreur.
Comment faire cela en Rust ?
Réponses à
- Comment passer une référence à une variable de pile à un thread ?
- Accès mutable simultané à des indices arbitraires d'un grand vecteur dont la disjonction est garantie
- Comment passer des tranches disjointes d'un vecteur à différents threads ?
- Comment exécuter des fils de calcul parallèles sur un tableau partitionné ?
- Comment obtenir des références mutables sur deux éléments de tableau en même temps ?
Ne répondez pas à ma question.
La réponse à la première question aborde le problème du champ d'application, mais pas celui de l'accès à l'information. arbitraire index mutuellement disjoints. La réponse à la deuxième question suggère as_slice_of_cells
mais cela ne fonctionne pas ici pour la raison mentionnée plus haut, à savoir la arbitraire l'accès. La réponse à la troisième question suggère également as_slice_of_cells
mais là encore, l'hypothèse selon laquelle le tableau peut être divisé en parties disjointes ne peut être satisfaite. La quatrième question porte à nouveau sur la partition du tableau, ce que nous ne pouvons pas faire ici. Il en va de même pour la cinquième question.
Une réponse au problème du champ d'application ( https://stackoverflow.com/a/64502824/10056727 ) en fait tentatives pour résoudre ce problème, mais elle ne suggère pas d'utiliser des traverses et l'alternative proposée est plus dangereuse que la première réponse ici.