Manual de programación de OS/2/Llamadas DOSxxx para semáforos
DosCloseEventSem
[editar]DosCloseEventSem cierra un semáforo de eventos cuando no se va a usar más.
#define INCL_BASE
#include <os2.h>
HEV hev;
APIRET rc; /* Codigo de error */
rc = DosCloseEventSem(hev);
Parámetros
[editar]hev | El handle del semáforo de eventos que se quiere cerrar. |
Codigos de error
[editar]0 | Sin error |
6 | HANDLE no valido |
301 | Semáforo ocupado |
DosCloseMutexSem
[editar]DosCloseMutexSem cierra un semáforo mutex cuando ya no se va a usar más.
#define INCL_BASE
#include <os2.h>
HMTX hmtx;
APIRET rc; /* Codigo de error */
rc = DosCloseMutexSem(hmtx);
Parámetros
[editar]hmtx | El handle del semáforo mutex que se quiere cerrar. |
Codigos de error
[editar]0 | Sin error |
6 | HANDLE no valido |
301 | Semáforo ocupado |
DosCreateEventSem
[editar]DosCreateEventSem crea un semáforo de tipo evento.
#define INCL_BASE
#include <os2.h>
PSZ pszName;
PHEV phev;
ULONG ulflattr;
BOOL32 f32fState;
APIRET rc; /* Codigo de error */
rc = DosCreateEventSem(pszName, phev, ulflattr, f32fState);
Parámetros
[editar]pszName | Puntero a una cadena ASCIIZ con el nombre del semáforo. El nombre tiene que empezar por \SEM32\, con un máximo de 255 caracteres. El nombre no puede coincidir con el de otro semáforo. Por defecto, el semáforo es compartido, salvo que este puntero sea NULL, en cuyo caso se identificará por el handle devuelto en phev, y se podrá especificar si es privado o compartido. | ||||||
phev | Un puntero a una posición de memoria donde OS/2 devolverá un handle al semáforo creado. | ||||||
ulflattr | Una serie de flags que especifican los atributos del semáforo. Si el bit DC_SEM_SHARED está activo, el semáforo será compartido. Solo se tiene en cuenta si el semáforo no tiene nombre, pues todos los semáforos con nombre son compartidos. | ||||||
f32fState | Indica el estado inicial del semáforo: | ||||||
|
Codigos de error
[editar]0 | Sin error |
8 | No hay suficiente memoria |
87 | Parámetro no valido |
123 | Nombre no válido |
285 | Nombre duplicado |
290 | No quedan handles disponibles |
DosCreateMutexSem
[editar]DosCreateMutexSem crea un semáforo de tipo Mutex.
#define INCL_BASE
#include <os2.h>
PSZ pszName;
PHMTX phmtx;
ULONG ulflattr;
BOOL32 f32fState;
APIRET rc; /* Codigo de error */
rc = DosCreateMutexSem(pszName, phmtx, ulflattr, f32fState);
Parámetros
[editar]pszName | Puntero a una cadena ASCIIZ con el nombre del semáforo. El nombre tiene que empezar por \SEM32\, con un máximo de 255 caracteres. El nombre no puede coincidir con el de otro semáforo. Por defecto, el semáforo es compartido, salvo que este puntero sea NULL, en cuyo caso se identificará por el handle devuelto en phmtx, y se podrá especificar si es privado o compartido. | ||||||
phmtx | Un puntero a una posición de memoria donde OS/2 devolverá un handle al semáforo creado. | ||||||
ulflAttr | Una serie de flags que especifican los atributos del semáforo. Si el bit DC_SEM_SHARED está activo, el semáforo será compartido. Solo se tiene en cuenta si el semáforo no tiene nombre, pues todos los semáforos con nombre son compartidos. | ||||||
f32fState | Indica el estado inicial del semáforo: | ||||||
|
Codigos de error
[editar]0 | Sin error |
8 | No hay suficiente memoria |
87 | Parámetro no valido |
123 | Nombre no válido |
285 | Nombre duplicado |
290 | No quedan handles disponibles |
DosOpenEventSem
[editar]DosOpenEventSem abre un semáforo de eventos ya creado.
#define INCL_BASE
#include <os2.h>
PSZ pszName;
PHEV phev;
APIRET rc; /* Codigo de error */
rc = DosOpenEventSem(pszName, phev);
Parámetros
[editar]pszName | Puntero a una cadena ASCIIZ con el nombre del semáforo. Si el semáforo es sin nombre, apuntará a NULL, y se identificará con el handle. |
phev | En entrada, un puntero al handle del semaforo a abrir, si éste es sin nombre. Si pszName no es NULL, este campo debe contener cero. En salida, un puntero al handle del semáforo que se ha abierto. |
Codigos de error
[editar]0 | Sin error |
6 | HANDLE no valido |
8 | No hay suficiente memoria |
87 | Parámetro no valido |
123 | Nombre no válido |
187 | Semáforo no encontrado |
291 | Demasiadas aperturas |
DosOpenMutexSem
[editar]DosOpenMutexSem abre un semáforo de eventos ya creado.
#define INCL_BASE
#include <os2.h>
PSZ pszName;
PHMTX phmtx;
APIRET rc; /* Codigo de error */
rc = DosOpenMutexSem(pszName, phmtx);
Parámetros
[editar]pszName | Puntero a una cadena ASCIIZ con el nombre del semáforo. Si el semáforo es sin nombre, apuntará a NULL, y se identificará con el handle. |
phmtx | En entrada, un puntero al handle del semaforo a abrir, si éste es sin nombre. Si pszName no es NULL, este campo debe contener cero. En salida, un puntero al handle del semáforo que se ha abierto. |
Codigos de error
[editar]0 | Sin error |
6 | HANDLE no valido |
8 | No hay suficiente memoria |
87 | Parámetro no valido |
105 | El propietario del semáforo ha muerto |
123 | Nombre no válido |
187 | Semáforo no encontrado |
291 | Demasiadas aperturas |
DosPostEventSem
[editar]DosPostEventSem cambia el estado de un semáforo de evento (post), de modo que todos los threads que estaban bloqueados con DosWaitEventSem seguirán su ejecución. Esta función puede ser usada por cualquier thread del proceso que creó el semáforo. Otros procesos pueden usarla, tras usar previamente DosOpenEventSem.
#define INCL_BASE
#include <os2.h>
HEV hev;
APIRET rc; /* Codigo de error */
rc = DosPostEventSem(hev);
Parámetros
[editar]hev | El handle del semáforo de eventos que se quiere cambiar (postear). |
Codigos de error
[editar]0 | Sin error |
6 | HANDLE no valido |
298 | Demasiados post ejecutados |
299 | Ya se encuentra posted |
DosQueryEventSem
[editar]DosQueryEventSem devuelve el contador de puesta (post count) de un semáforo de eventos. Puede ser usada por cualquier thread del proceso que creó el semáforo, o bien por otros procesos si estos han hecho una llamada a DosOpenEventSem.
#define INCL_BASE
#include <os2.h>
HEV hev;
PULONG pulPostCt;
APIRET rc; /* Codigo de error */
rc = DosQueryEventSem(hev, pulPostCt);
Parámetros
[editar]hev | El handle del semáforo de evento a consultar. |
pulPostCt | Un puntero a una posición de memoria donde OS/2 devolverá el contador. El contenido es el número de peticiones DosPostEventSem que ha recibido ese semáforo. |
Codigos de error
[editar]0 | Sin error |
6 | HANDLE no valido |
87 | Parámetro no valido |
DosQueryMutexSem
[editar]DosQueryMutexSem devuelve información sobre el actual poseedor de un semáforo mutex. Esta función puede ser usada por cualquier thread del proceso que creó el semáforo. Otros procesos pueden usarla, tras usar previamente DosOpenEventSem.
#define INCL_BASE
#include <os2.h>
PPID ppidOwner;
PTID ptidOwner;
PULONG pulCount;
APIRET rc; /* Codigo de error */
rc = DosQueryMutexSem(hmtx, ppidOwner, ptidOwner, pulCount);
Parámetros
[editar]hmtx | El handle del semáforo mutex a consultar. |
ppidOwner | Un puntero a una posicion de memoria donde OS/2 devolverá el PID del actual poseedor del semáforo, o de un proceso que terminó sin liberarlo. |
ptidOwner
Un puntero a una posición de memoria donde OS/2 devolverá el TID (identificador de thread) del actual poseedor del semaforo. |
|
pulCount | Un puntero a una posición de memoria donde OS/2 devolverá el número de peticiones del semaforo. Este es el número de llamadas a DosRequestMutexSem menos el número de llamadas a DosReleaseMutexSem que se han hecho al semáforo indicado. Si el semáforo no esta poseido por nadie, este valor será cero. |
Codigos de error
[editar]0 | Sin error |
6 | HANDLE no valido |
87 | Parámetro no valido |
105 | El propietario del semáforo ha muerto |
DosReleaseMutexSem
[editar]DosReleaseMutexSem libera un semáforo pedido con DosRequestMutexSem. Esta función puede ser usada por cualquier thread del proceso que creó el semáforo. Otros procesos pueden usarla, tras usar previamente DosOpenEventSem.
#define INCL_BASE
#include <os2.h>
HMTX hmtx;
APIRET rc; /* Codigo de error */
rc = DosReleaseMutexSem(hmtx);
Parámetros
[editar]hmtx | El handle del semáforo a liberar. |
Codigos de error
[editar]0 | Sin error |
6 | HANDLE no valido |
288 | No se ha hecho DosRequestMutexSem |
DosRequestMutexSem
[editar]DosRequestMutexSem pide control sobre un semáforo MUTEX. Si el semáforo ya esta controlado, el thread es dormido hasta que el que el semáforo sea liberado con DosReleaseMutexSem. Esta función puede ser usada por cualquier thread del proceso que creó el semáforo. Otros procesos pueden usarla, tras usar previamente DosOpenEventSem.
#define INCL_BASE
#include <os2.h>
HMTX hmtx;
ULONG ulTimeout;
APIRET rc; /* Codigo de error */
rc = DosRequestMutexSem(hmtx, ulTimeout);
Parámetros
[editar]hmtx | El handle del semáforo mutex, obtenido a través de DosCreateMutexSem o de DosOpenMutexSem. |
ulTimeout | El tiempo en milisegundos que debe esperar a que el semáforo sea liberado en caso de estar bloqueado. Este parámetro ayuda a evitar interbloqueos (deathlocks). Hay dos valores especiales: si vale 0 (SEM_INMEDIATE_RETURN), retorna inmediatamente sin bloquear el thread; si vale -1 (SEM_INDEFINITE_WAIT) duerme el thread por tiempo indefinido. |
Codigos de error
[editar]0 | Sin error |
6 | HANDLE no valido |
95 | Interrupción |
103 | Demasiados SEM_REQUEST |
105 | El propietario del semáforo ha muerto |
640 | TimeOut (finalizó el tiempo) |
DosResetEventSem
[editar]DosResetEventSem borra un semáforo de evento, de modo que todos los threads que hagan una petición DosWaitEventSem quedarán bloqueados. Esta función puede ser usada por cualquier thread del proceso que creó el semáforo. Otros procesos pueden usarla, tras usar previamente DosOpenEventSem.
#define INCL_BASE
#include <os2.h>
HEV hev;
PULONG pulPostCt;
APIRET rc; /* Codigo de error */
rc = DosResetEventSem(hev,punPostCt);
Parámetros
[editar]hev | Handle del semáforo de evento a borrar |
pulPostCt | Un puntero a una posición de memoria donde OS/2 devolverá el número de veces que el semáforo ha recibido una petición DosPostEventSem. |
Codigos de error
[editar]0 | Sin error |
6 | HANDLE no valido |
300 | El semáforo ya está borrado. |
DosWaitEventSem
[editar]DosWaitEventSem bloquea el thread actual si el semáforo de evento referido está borrado, y lo mantiene así hasta que sea liberado. Esta función puede ser usada por cualquier thread del proceso que creó el semáforo. Otros procesos pueden usarla, tras usar previamente DosOpenEventSem.
#define INCL_BASE
#include <os2.h>
HEV hev;
ULONG ulTimeout;
APIRET rc; /* Codigo de error */
rc = DosWaitEventSem(hev, ulTimeout);
Parámetros
[editar]hev | Handle al semáforo de evento al que se quiere esperar. |
ulTimeout | El tiempo en milisegundos que debe esperar a que el semáforo sea liberado en caso de estar bloqueado. Este parámetro ayuda a evitar interbloqueos (deathlocks). Hay dos valores especiales: si vale 0 (SEM_INMEDIATE_RETURN), retorna inmediatamente sin bloquear el thread; si vale -1 (SEM_INDEFINITE_WAIT) duerme el thread por tiempo indefinido. |
Codigos de error
[editar]0 | Sin error |
6 | HANDLE no valido |
8 | No hay suficiente memoria |
95 | Interrupción |
640 | TimeOut (finalizó el tiempo) |