Dans un système d'acquisition de signaux numériques, les données sont souvent transmises à un observateur dans le système par un thread.Modèle de conception pour les observateurs multithread
exemple de Wikipedia/Observer_pattern:
foreach (IObserver observer in observers)
observer.Update(message);
Lorsque par exemple, une action de l'utilisateur par exemple un thread GUI nécessite que les données s'arrêtent de couler, vous voulez rompre la connexion sujet-observateur, et même disposer de l'observateur tout à fait.
On peut argumenter: vous devriez juste arrêter la source de données, et attendre une valeur sentinelle pour disposer de la connexion. Mais cela entraînerait plus de latence dans le système.
Bien sûr, si le thread de pompage de données vient de demander l'adresse de l'observateur, il peut trouver qu'il envoie un message à un objet détruit.
Quelqu'un a-t-il créé un motif de conception «officiel» pour contrer cette situation? Ne devraient-ils pas?
Je suis un peu confus ici. Qu'est-ce que vous essayez d'éviter?Parlez-vous d'un cas où un thread veut désinscrire un observateur, mais un autre thread itérer sur tous les observateurs? –
Je ne sais pas dans quelle classe concrète vous avez implémenté 'IObserver' mais si" Update "veut dire" faites tout ce que vous devez faire pour vous mettre à jour avec une source de données ", alors le comportement correct pour un objet disposé serait de ne rien faire en silence. Si un objet associé à chaque observateur indique s'il doit continuer à recevoir des abonnements et si l'objet de pompage possède un indicateur indiquant si ces objets ont demandé une désinscription depuis leur dernière analyse, le thread de pompage peut interroger les objets pour les désabonnements. si nécessaire. – supercat