Est-géré C++ ont un équivalent à C#' s lock() et VB SyncLock? Si oui, comment l'utiliser?C# 's verrouillage() en C++ géré
18
A
Répondre
20
Le equivelent à un verrouillage/SyncLock serait d'utiliser la classe Monitor.
Dans 1-3.5sp .NET, verrouillage (obj) fait:
Monitor.Enter(obj);
try
{
// Do work
}
finally
{
Monitor.Exit(obj);
}
À partir de .NET 4, il sera:
bool taken = false;
try
{
Monitor.Enter(obj, ref taken);
// Do work
}
finally
{
if (taken)
{
Monitor.Exit(obj);
}
}
Vous pouvez traduire en C++ en faisant :
System::Object^ obj = gcnew System::Object();
Monitor::Enter(obj);
try
{
// Do work
}
finally
{
Monitor::Exit(obj);
}
-2
2
Il n'y a pas d'équivalent du mot-clé lock
en C++. Vous pouvez le faire à la place:
Monitor::Enter(instanceToLock);
try
{
// Only one thread could execute this code at a time
}
finally
{
Monitor::Exit(instanceToLock);
}
55
C++/CLI a une classe de « lock » - tout ce que vous devez faire est de déclarer la variable de verrouillage en utilisant la sémantique basée sur la pile et il sera en toute sécurité quitter le moniteur lorsque son destructor est appelé , par exemple:
#include <msclr\lock.h>
{
msclr::lock l(m_lock);
// Do work
} //destructor of lock is called (exits monitor).
La déclaration 'm_lock' dépend des membres que vous souhaitez protéger. Pour protéger les membres d'instance utilisent ceci:
Object^ m_lock = gcnew Object(); // Each class instance has a private lock -
// protect instance members.
Pour protéger les membres statiques utilisent ceci:
static Object^ m_lock = gcnew Object(); // Type has a private lock -
// protect static members.
Questions connexes
- 1. C# à C non géré ++
- 2. Création d'un KeyValuePair en C++ géré
- 3. Déclaration de verrouillage C#
- 4. Fournisseur OleDB géré écrit en C#
- 5. Conversion de code C++ non géré en C#
- 6. Bibliothèque d'E/S réseau simple C/C++
- 7. Jeton C++ non résolu géré
- 8. Nettoyage de thread géré C#
- 9. Code de rappel non géré de C géré
- 10. Erreur CLI C++ C3767: fonction (s) candidate (s) non accessible (s)
- 11. Initialisation de tableau dans C++ géré
- 12. Détecter le mode débogage dans C++ géré
- 13. Caps Remplacer le verrouillage avec Ctrl en utilisant C#
- 14. poste de travail de Windows verrouillage par programmation en C#
- 15. Création d'un maillage personnalisé en C# géré DirectX
- 16. Affectation des objets gérés dans C++ géré
- 17. Littéraux verbatim dans C++ managé? (comme C# 's @ "blah")
- 18. équivalent Java de C# 's Rfc2898DerivedBytes
- 19. select() pour l'E/S sur plusieurs fichiers en C#?
- 20. Test d'unité C++ non géré dans Visual Studio 2008
- 21. Comment marshaler un tableau C++/CLI de struct en C++ non géré
- 22. Quel est le C++ géré équivalent à C# en utilisant la déclaration
- 23. Existe-t-il des outils pour convertir le C++ géré en C++/CLI?
- 24. Fonction d'E/S de fichier pour C
- 25. Appel du composant C# géré à partir du code C++ non géré, comment puis-je définir la configuration
- 26. Code C natif non géré vers .NET compatible
- 27. Objets de simultanéité, de verrouillage et de dictionnaire C#
- 28. Verrouillage C# et question de conception de filetage général
- 29. Wrapper géré par C++/CLI et ADODB :: Recordset
- 30. Marshalling C# (passage la structure à un type non géré)
Je considère http://stackoverflow.com/questions/1369459/cs-lock-in-managed -c/7527111 # 7527111 supérieur en ce qu'il est à la fois plus dans la nature C++ (RAII) et plus proche du mot clé de verrouillage C# – sehe