Manual de programación de OS/2/Llamadas DOSxxx para semáforos

De Wikilibros, la colección de libros de texto de contenido libre.

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:
Valor
Definición
0 (Falso) El valor inicial es 'reset'.
1 (Verdadero) El valor inicial es 'posted'.

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:
Valor
Definición
0 (Falso) El valor inicial es 'sin propietario'.
1 (Verdadero) El valor inicial es 'con propietario'.

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)