Pregunta

Me gustaría utilizar semáforos POSIX para gestionar atómica obtener y colocar en un archivo que representa una cola.Quiero que la flexibilidad de tener algo con nombre en el sistema de ficheros, por lo que está completamente relacionado con los procesos pueden compartir una cola.Creo que este plan de las normas de pthreads.El llamado posix semáforos son grandes para poner algo en el sistema de ficheros que cualquier proceso puede ver, pero no puedo encontrar el estándar de CondWait primitiva:

... decide we have to wait ....
CondWait(sem, cond);

Cuando CondWait es llamado por un proceso atómico puestos a sem y espera en cond.Cuando algún otro proceso de puestos a cond, el proceso de espera se despierta sólo si puede atómicamente decremento sem así.La alternativa de

... decide we have to wait ....
sem_post(sem);
sem_wait(cond);
sem_wait(sem);

está sujeta a una condición de carrera en el que algunas otras señales del proceso cond justo antes de este proceso de espera en él.

Yo casi nunca hacer cualquier programación concurrente, por lo que pensé que me iba a pedir con el fin de:si yo uso un estándar POSIX contar semáforo de la variable de condición, es posible que esta carrera es benigno?

Sólo en caso de que alguien quiere el contexto más amplio, yo soy la construcción de obtener y colocar operaciones para atómica de la cola que puede ser llamado a partir de secuencias de comandos de shell.

¿Fue útil?

Solución

Dado que no existen otras respuestas voy a seguir con lo que he aprendido:

  • Pthreads no funcionarán con mi solicitud porque tengo procesos sin un ancestro común, que necesitan compartir una cola atómica.
  • semáforos POSIX son sujeto a la carrera con la activación de espera, pero los semáforos porque a diferencia de las variables clásicas condición están contando , la carrera es benigno. No tengo una prueba de esta afirmación, pero he tenido un sistema que ejecuta desde hace dos días y trabajando bien. (Completamente sin sentido sé, pero al menos significaba que hizo el trabajo.)
  • semáforos POSIX con nombre son difícil de basura recogen desde el sistema de archivos .

Para resumir, semáforos POSIX nombre resultó ser un buena base para la implementación de una abstracción atómica cola para ser compartida entre los procesos no relacionados .

Me gustaría tener una prueba o un modelo validado SPIN, pero como mi necesidad de la aplicación es limitada, parece poco probable que voy a escribir uno. Espero que esto ayude a alguien que pueda querer usar semáforos POSIX.

Otros consejos

De acuerdo a la POSIX estándar, el conjunto de semaphore rutinas es:

  • sem_close()
  • sem_destroy()
  • sem_getvalue()
  • sem_init()
  • sem_open()
  • sem_post()
  • sem_timedwait()
  • sem_trywait()
  • sem_unlink()
  • sem_wait()

El sem_trywait() y sem_timedwait() funciones podría ser lo que usted está buscando.

Sé que esta pregunta es antiguo, pero la solución obvia sería sólo tiene que utilizar las variables de proceso mutex-compartida y estado situado en un archivo que puede mmap.

Se busca: pthread_cond_wait, pthread_cond_signal, creo
. Eso es si está utilizando hilos POSIX, a continuación, los métodos pthread suministrarían la funcionalidad de CondWait y Signal.
Mira aquí para código fuente en pthreads multiproceso a través de memoria compartida.
http://linux.die.net/man/3/pthread_mutexattr_init
Eso es para Linux, pero los documentos son POSIX. Son similares a Solaris, pero usted querrá leer las páginas del manual de su sistema operativo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top