En C y C++, ¿hay una forma multiplataforma de producir un hilo? Algo como sched_yield() o Sleep (0)? ¿SDL_Delay (0) siempre cede o volverá inmediatamente en algunas implementaciones?¿Forma de plataforma cruzada para producir un hilo en C/C++?
Respuesta
Dado que ni C ni C++ (hasta C++ 98) tienen "hilos", no existe una forma completamente multiplataforma para que un hilo ceda.
En C++ 0x, hay una función std::this_thread::yield()
que se puede invocar para ceder. Esa será la forma portátil de que un hilo ceda, una vez que las personas comiencen a usar la biblioteca de hilos C++ 0x.
Me doy cuenta de que esto no está incorporado en el lenguaje. Principalmente me pregunto si hay una biblioteca disponible que hace esto, de ahí el comentario sobre SDL_Delay. – Shum
@Shum: cualquiera que sea la biblioteca de threading que esté utilizando probablemente tenga una. ¿Qué biblioteca de hilos * estás * usando? –
@Shum: tan pronto como dice "biblioteca", la única respuesta es "tal vez, depende de qué plataformas admita la biblioteca y qué funcionalidad ofrece la biblioteca". –
en el caso de C++, boost::thread::yield()
hace lo que pide. En plataformas con subprocesos posix, pthread_yield()
realiza la misma función para C y cualquier cosa que se vincule con ella. En las plataformas donde esto no detiene inmediatamente el hilo y comienza otro, es porque el planificador no admite esa funcionalidad. No creo que muchas de esas plataformas realmente existan en la naturaleza.
El rendimiento no tiene que iniciar otro hilo; el programador podría reanudar inmediatamente el hilo que produjo. –
@James: redacción acordada y ambigua, pero considerada desde la perspectiva de los programadores de división de tiempo, esa línea refleja que cualquier nuevo subproceso aún esperaría la porción existente antes de tener alguna posibilidad de ser programado, en lugar de comentar si otro subproceso realmente toma su lugar. –
En Windows (que por supuesto no tiene subprocesos POSIX), esencialmente se llama 'Sleep' con un límite de tiempo de 0 para ceder. –
- 1. desarrollo de plataforma cruzada
- 2. módulo usb de plataforma cruzada para python?
- 3. plataforma cruzada .Net?
- 4. Asterisk plataforma cruzada compilación
- 5. ¿Existe alguna forma de plataforma cruzada para abrir un buscador de archivos en Python?
- 6. ¿Qué es una forma de plataforma cruzada para reproducir un archivo de sonido en python?
- 7. Forma de plataforma cruzada para abrir un archivo usando Java 1.5
- 8. API TCP/IP simple de plataforma cruzada?
- 9. Forma de plataforma cruzada para obtener PID por nombre de proceso en python
- 10. Forma de plataforma cruzada para obtener el directorio temporal en Python
- 11. ¿Hay una biblioteca de plataforma cruzada C++?
- 12. Plataforma cruzada ligera C GUI (OpenGL)
- 13. Función de suspensión de plataforma cruzada para C++
- 14. API de sonido de plataforma cruzada para juegos?
- 15. Comenzando con un proyecto de C + + de plataforma cruzada
- 16. forma de plataforma cruzada para cambiar la prioridad del proceso java
- 17. ¿Qué es una forma de plataforma cruzada para obtener el directorio actual?
- 18. ¿Existe una forma de plataforma cruzada no java para iniciar la aplicación asociada para un determinado tipo de archivo?
- 19. C++ - Cómo configurar permisos de archivos (plataforma cruzada)
- 20. ¿Forma de plataforma cruzada para comprobar los derechos de administrador en una secuencia de comandos de Python en Windows?
- 21. ¿Qué lenguaje de scripting de plataforma cruzada debemos adoptar para un grupo de DBA?
- 22. ¿Cuál es la buena plataforma cruzada C++ IDE?
- 23. Cifrado RSA en Java: ¿Problemas con la plataforma cruzada?
- 24. Plataforma cruzada, Lenguaje de marcado GUI agnóstico de idioma?
- 25. Operaciones de escritura de archivos atómicos (plataforma cruzada)
- 26. boost vs ACE C++ Comparación de rendimiento de plataforma cruzada?
- 27. Bibliotecas dinámicas de plataforma cruzada C++; Linux y Windows
- 28. Plataforma cruzada Java? Android y computadora de escritorio
- 29. Debo desarrollar de forma cruzada para Linux en Visual Studio
- 30. ¿Cuál es la mejor manera de verificar si un archivo existe en C++? (plataforma cruzada)
rendimiento() es a menudo un mal diseño. Si necesita esperar algo, espere de forma explícita a través de un evento, señal o condición de algún tipo. –
Tenga en cuenta que es imposible escribir una versión de "rendimiento" que * siempre * ceda. ¿Qué pasa si no hay otro hilo para ceder * a *? Diría que SDL_Delay de SDL (0) hace exactamente lo que usted quiere. –