2011-07-13 4 views
1

J'ai été chargé de supprimer les appels bloquants d'une application C#. Il s'avère que c'est une exigence de l'environnement sur lequel il fonctionnera. Je comprends le concept d'un appel bloquant, cependant, je ne sais pas par où commencer à trouver des appels de blocage existants.Recherche d'appels de blocage dans la solution VS2010

donc quelques questions:

  1. Pour toute fonction donnée, comment puis-je dire si oui ou non il bloque? Y a-t-il un moyen autre que de consulter la documentation?
  2. Existe-t-il un moyen de rechercher un blocage dans un projet ou une solution? Par exemple. un plug-in qui pourrait me le dire?
+1

Je suppose que par «blocage» vous voulez dire une fonction qui est appelée à partir du thread d'interface utilisateur qui prend plus d'une petite quantité de temps? Par exemple, les requêtes d'E/S de fichiers peuvent être considérées comme bloquantes. Ou voulez-vous dire bloquer strictement les appels tels que l'attente sur un sémaphore ou mutex? –

+0

@AresAvatar, Bonne question, les exigences doc ne différencie pas du tout. Étant donné le contexte, je suppose que le fichier IO n'est pas inclus. –

Répondre

1

Je ne connais aucun moyen automatique de trouver des appels de blocage. La plupart des codes de blocage sont utilisés pour la synchronisation de threads ou de processus tels que lock, Monitor.Enter, Mutex et Semaphore/SemaphoreSlim, CountdownEvent et Barrier class use. Il y a aussi les verrous SpinLock et ReaderWriterLock/ReaderWriterLockSlim qui bloquent.

Plusieurs appels Thread bloquent. Thread.Sleep peut techniquement être considéré comme un appel bloquant, bien qu'il dure une quantité de temps limitée. Thread.Join attend que les autres threads se terminent et bloque ainsi. Les boucles For et While peuvent être considérées comme bloquantes car elles s'exécuteront jusqu'à ce qu'elles soient terminées, mais elles utiliseront généralement l'un des appels ci-dessus (en particulier le verrou) si elles attendent une variable spécifique mise à jour dans un autre thread. Gardez à l'esprit que le retrait de l'un de ceux-ci est susceptible d'avoir un impact négatif important sur la sécurité du filetage.

Questions connexes