En una aplicación con múltiples hilos, ¿hay alguna forma de garantizar que una sección crítica se inicialice solo una vez, excepto para poner el código en DLL main() ??Inicializar la sección crítica solo una vez para un proceso
Respuesta
Sugiero que envuelva CRITICAL_SECTION con una clase que manejará la inicialización y desinicialización del objeto de sección crítica en su constructor y destructor. De esta forma, estarás protegido contra subprocesos en la mayoría de los casos (tendrás que asegurarte de que nadie acceda al objeto antes de que termine su constructor, pero eso es relativamente fácil).
Existen varias envolturas comunes para CRITICAL_SECTION que puede usar. La opción obvia es CCriticalSection de MFC, pero también puede crear la suya propia.
Seguro que hay muchas formas.
- Utilice una variable global
- utilizar una instancia singleton
- Cree que en el principal o alguna otra función de instancia única
- crearlo como miembro var de alguna instancia única clase ejemplo
y así sucesivamente. Esto no es diferente de cualquier otra cuestión de tratar de crear una instancia única de algo en su código.
También puede usar una clase contenedora y declarar un objeto global de esa clase. El constructor del objeto global se invocará solo una vez al inicio.
En Windows Vista puede usar las funciones de inicialización de una sola vez. Using One-Time Initialization muestra cómo usarlos para asegurarse de que un evento se inicialice solo una vez.
Puede inicializar una sección crítica global en DllMain
para DLL_PROCESS_ATTACH
(y limpiar para DLL_PROCESS_DETACH
).
- 1. Sección crítica en MPI?
- 2. ¿Qué es exactamente una sección crítica?
- 3. ¿La sección crítica es siempre más rápida?
- 4. ¿Cómo hago una sección crítica con Boost?
- 5. ¿Es válido anidar una sección crítica?
- 6. Implementando una sección crítica en CUDA
- 7. Reemplazar la sección crítica con bloqueo SRW
- 8. hay ¿Hay una barrera implícita después de omp sección crítica
- 9. Contador de bloqueo negativo de la sección crítica
- 10. semáforos, la sección crítica, mutex Ejemplos de MFC y C#
- 11. ¿Cuál es la diferencia entre mutex y sección crítica?
- 12. Diferencia entre "Sección crítica", "Región crítica" y "Región de ejecución limitada"
- 13. Ellipsize solo una sección en un TextView
- 14. ¿En qué circunstancias una Sección crítica de Windows puede tener un Conteo de bloqueo negativo?
- 15. Dónde inicializar algo UNA VEZ en un UIViewController
- 16. "DebugInfo para CritSec no apunta a la sección crítica" al analizar el interbloqueo
- 17. ¿Cómo activar una función una vez, y solo una vez ...?
- 18. ¿Solo disparar un evento una vez?
- 19. Delphi 2009: ¿Cómo evito que la aplicación de red pierda una sección crítica?
- 20. ¡Solo un hilo a la vez!
- 21. dojo.dnd un artículo a la vez solo
- 22. ¿Por qué mi hilo está bloqueado por una sección crítica que no retiene?
- 23. layoutAnimation funciona solo una vez
- 24. jQuery - Haz solo una vez
- 25. Mostrar div solo una vez
- 26. ¿Se puede realizar el cambio de contexto en una sección crítica?
- 27. ¿Cómo inicializar una matriz en un solo paso con Ruby?
- 28. Llamar a una función solo una vez
- 29. Existe un límite de memoria para un solo proceso .NET
- 30. Android ProgressBar.setProgressDrawable solo funciona una vez?
Este es definitivamente un buen enfoque; confiar en variables globales o singletons no funciona bien si se necesita usar la sección crítica antes de garantizar que todos los constructores de objetos globales sean llamados. – reuben