Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

445
Vistas
Roscado y seguridad de subprocesos en C

Cuando hay un conjunto común de datos globales que deben compartirse entre varios procesos con subprocesos, generalmente he usado un token de subproceso para proteger el recurso compartido:

ingrese la descripción de la imagen aquí

Editar: 22/7/15 (para incorporar atómica como una opción viable, según los comentarios de Jens)

Mi [Primera] pregunta es , en C, si escribo mis rutinas de tal manera que garantice que cada subproceso acceda a uno, y solo a un elemento de una matriz:

ingrese la descripción de la imagen aquí

¿Hay alguna razón para pensar que el acceso asíncrono y simultáneo a diferentes índices de la misma matriz desprotegida (como se muestra en el diagrama) sería un problema?

Segunda pregunta: dado que un objeto al que se puede acceder como una entidad atómica, incluso en presencia de interrupciones asíncronas ( C99 - 7.14 Manejo de señales ), ¿el uso de atómicas sería un método efectivo para la protección de subprocesos para una variable desprotegida?

ingrese la descripción de la imagen aquí

Editar (Aclaraciones para abordar las preguntas en los comentarios a este punto):
- Especificaciones para esta aplicación:
- Sistema operativo de destino: Windows 7/8/10
- Compilador: compatible con C99 (no se puede usar C11, que incluye el especificador de tipo _ Atomic() )
-H/W: familia Intel i7

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Esto (que parece un estándar C de algún tipo) http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf dice:

NOTA 1 Dos subprocesos de ejecución pueden actualizar y acceder a ubicaciones de memoria separadas sin interferir entre sí

NOTA 13 Las transformaciones del compilador que introducen asignaciones a una ubicación de memoria potencialmente compartida que no sería modificada por la máquina abstracta generalmente están excluidas por este estándar, ya que tal asignación podría sobrescribir otra asignación por un subproceso diferente en casos en los que la ejecución de una máquina abstracta no haber encontrado una carrera de datos. Esto incluye implementaciones de asignación de miembros de datos que sobrescriben miembros adyacentes en ubicaciones de memoria separadas. Por lo general, también excluimos el reordenamiento de las cargas atómicas en los casos en que los átomos en cuestión puedan crear alias, ya que esto puede violar las reglas de "secuencia visible".

Según tengo entendido, esto evitaría las preocupaciones de quamrana y le garantizaría que las escrituras desprotegidas en ubicaciones de memoria separadas nunca deberían dar como resultado un comportamiento indefinido si no hay carrera de datos.

over 4 years ago · Santiago Trujillo Denunciar

0

En C dependerá de tu plataforma, esa es tu combinación de compilador, arquitectura de procesador y sistema operativo.

Su compilador puede elegir cómo usar los registros internos y las instrucciones de la CPU para hacer que el ejecutable parezca cumplir con la intención del programa. Y C puede no saber nada sobre hilos. Por lo general, el trabajo del sistema operativo es proporcionar una biblioteca de subprocesos.

Puede haber procesadores que puedan realizar la escritura en un elemento de su matriz al leer un parche de memoria mucho más grande que solo un elemento, luego sobrescribir solo los bits correctos que forman un elemento dentro de los registros internos y luego volver a escribir todo el parche. Un programa de un solo subproceso funcionaría bien, pero dos o más subprocesos que se interrumpan entre sí podrían causar caos en la matriz.

Por otro lado, puede funcionar bien.

Y como se ha dicho, el acceso de solo lectura siempre está bien.

Además, Google es tu amigo. Encontró esta pregunta de stackoverflow.

over 4 years ago · Santiago Trujillo Denunciar

0

Si cada subproceso accede a un elemento de matriz diferente, y solo el elemento que está "asignado", esto no debería ser un problema. Ambos escenarios anteriores son esencialmente equivalentes, ya que cada elemento de la matriz tiene su propia dirección.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda