Traduzca

Translate to EnglishÜbersetzen Sie zum Deutsch/GermanΜεταφράστε στα ελληνικά/GreekПереведите к русскому/RussianOversetter til Norsk/NorwegianÖversätta till Svensk/Swedishहिनà¥à¤¦à¥€ अनà¥à¤µà¤¾à¤¦ करने के लिà¤/Hindi
Tradueix al català/CatalanTulkot uz latviešu/LatvianPreložiť do slovenčiny/SlovakVertaal aan het Nederlands/Dutchترجمة الى العربية/ArabicTraduzca al Español/SpanishTraduisez au Français/French
Traduca ad Italiano/ItalianTraduza ao Português/Portuguese日本語に翻訳しなさい /Japanese한국어에게 번역하십시오/Korean中文翻译/Chinese Simplified中文翻译/Chinese TraditionalПереклад на українську/Ukrainian
Imagen de la programación avanzada en el ambiente de UNIX, segunda edición (series computacionales del profesional de Addison-Wesley)
Imagen de los conceptos del sistema operativo
Imagen de XSLT 2.0 y de la referencia de programador de XPath 2.0 (programador al programador)
Imagen de comenzar Google Maps API 3

WaitForSingleObject que vira hacia el lado de babor al linux - parte 2

En mi poste pasado discutí el uso de WaitForSingleObject en lo referente a mutexes y a maneras posibles de ejecutar funcionalidad equivalente al virar tal código hacia el lado de babor a GNU/Linux.  En este poste describiré el uso de este API con los objetos del acontecimiento en Microsoft Windows y sugeriré maneras posibles de fijar tal código a GNU/Linux o a Unix.

Primero, un cierto fondo en objetos del acontecimiento.  Un objeto del acontecimiento es apenas otro tipo de objeto del despachador del núcleo de Windows.  De una codificación prespective, un objeto del acontecimiento es un objeto de la sincronización que encapsula uno o más objetos del despachador del núcleo y cuya semántica de la sincronización es accesible vía WaitForSingleObject y sus primos.  En un momento dado un objeto de la sincronización nonsignaled o se señala, es decir el objeto puede solamente estar en uno de dos estados posibles.

Toda la familia de WaitFor de APIs incluyendo la espera de WaitForSingleobject en una manija del objeto o las manijas hasta algunos criterios especificados se resuelve.  Los dos criterios básicos para todos estos APIs son el estado señalado del objeto en cuya manija está esperando y un valor del time out.  Así un hilo de rosca que llama esperas de este API hasta que el objeto especificado incorpora el estado señalado o el descanso especificado ha expirado.  Se utiliza poco o nada de tiempo CPU cuando tal hilo de rosca está en el estado de espera.

En el caso de acontecimientos, un CreateEvent o un OpenEvent vuelve una manija a un objeto del acontecimiento.  Cuando un acontecimiento está en el estado señalado significa que ése el acontecimiento tiene la capacidad de lanzar uno o más hilos de rosca que esperan este acontecimiento particular que se señalará.  Cuando un acontecimiento está en el estado nonsignaled no lanzará ninguÌn hilo de rosca que espera.  El estado de un acontecimiento nonsignaled inicialmente.  Un estado de objeto del acontecimiento es fijado explícitamente a señalado por SetEvent o PulseEvent.  Los objetos del acontecimiento también se utilizan en operaciones traslapadas tales como lectura en un zócalo, en este caso el estado de objeto del acontecimiento es fijado a señalado por el núcleo algo que por un uso.

Los acontecimientos también vienen en dos tipos reajustados.  Si un acontecimiento es un acontecimiento del manual-reajuste, después toda la vuelta de WaitForSingleObjects que espera ese acontecimiento si están configurado tan.  Es decir un acontecimiento del manual-reajuste puede accionar la acción por uno o más WaitForSingleObject o sus primos.  Un estado de objeto del acontecimiento del manual-reajuste se debe reajustar explícitamente a nonsignaled por ResetEvent.

Para un objeto del acontecimiento del auto-reset, WaitForSingleObject y es relaciones reajustado

WaitForSingleObject que vira hacia el lado de babor al linux - parte 1

Estuve implicado recientemente en virar un uso hacia el lado de babor de 32 bits que fue escrito inicialmente para el NT de Microsoft Windows a GNU/Linux.  Este uso contuvo una gran cantidad de llamadas a NtWaitForSingleObject y un número más pequeño de llamadas a NtWaitForMultipleObject. 

Ahora cualquiera que ha tenido que virar el código hacia el lado de babor que contenía más que algunos casos de estos APIs particulares Win32, o sus primos cercanos WaitForSingleObjectEx, MsgWaitForMultipleObjects, MsgWaitForMultipleObjectsEx, etc. a Unix o GNU/Linux probablemente se está estremeciendo ya con el recuerdo de días y de noches arduos largos de la codificación de ensayo y de error para intentar y para mímico correctamente la semántica y la funcionalidad de estos APIs específicos particulares de Microsoft Windows, pero para el lector que todavía no ha tenido que intentar virar tal uso, este poste y mi poste hacia el lado de babor siguiente puede ayudarle excepto su cordura (y posiblemente su pelo!) alguna vez en el futuro.

A propósito, ambos APIs se marcan desaprobaron en MSDN de Microsoft pero todavía trabajan según lo esperado en Windows NT y Windows Xp.  No estoy seguro sobre Windows Vista o Windows 7 pues no los he probado en estos sistemas operativos.  Los dos APIs desaprobados han sido substituidos por los APIs equivalentes WaitForSingleObject y WaitForMultipleObject respectivamente.  Para el resto de este poste apenas discutiré los APIs del reemplazo pero la mayor parte de qué digo sea válido para haber desaprobado o el reemplazo API.

En la primera examinación WaitForSingleObject parece bastante benigno.  La descripción en MSDN indica que esta función vuelve cuando el objeto especificado está en el estado señalado o cuando transcurre el intervalo del descanso.  ¿Suena como un API bastante simple e inofensivo, la derecha?  Quizá algo similar al pthread_cond_timedwait de POSIX.1 API.  Bien, usted es absolutamente incorrecto y este poste y lo que sigue explicarán por qué.

WaitForSingleObject y sus primos pueden esperar una señal de lo que sea de los objetos siguientes: cambie la notificación, la entrada de la consola, el acontecimiento, el trabajo, la notificación del recurso de memoria, el mutex, el proceso, el semáforo, el hilo de rosca y el contador de tiempo waitable y en circunstancias limitadas en archivos y la entrada-salida del archivo.  Cuando está señalado apropiadamente, un hilo de rosca se desbloquea y continúa.  NinguÌn API estandardizado publicado en el mundo de GNU/Linux o de Unix viene venido a manejar esta gama de objetos en un solo API.

Ésta es probablemente la una sola área donde un Win32 API se diseña mejor que el sistema de GNU/Linux o de Unix API.  En GNU/Linux y Unix hay APIs específicos para esperar diversas clases de