C inverso de orden de una pila concurrente

Me gustaría revertir el orden de una pila concurrente de una manera segura y eficiente en el uso de subprocesos. La forma en que estoy pensando en hacer esto es mostrar cada elemento de la pila concurrente y colocarlo en otra pila simultánea temporal. Una vez finalizado, la pila temporal contendrá el orden invertido y la pila principal estará vacía. Entonces iba a hacer algo como esto:

mainStack.PushRange(tempStack.Reverse().ToArray());

Sin embargo, no creo que esto sea seguro.

TIA

0
Ya. Simplemente use un candado con una LinkedList y un bool para decirle de qué final se debe alimentar.
agregado el autor Will, fuente
@servy Perdón por la confusión, lo que dices tiene sentido, pero parece que el bloqueo no es para la pila concurrente sino para otra variable que a veces se usa con la pila. Ahora he modificado mi pregunta original, ya que la pila no siempre se usa dentro de un bloque de bloqueo.
agregado el autor millie, fuente
Bueno, si vas a bloquearlo cuando lo usas para hacer esto, necesitas usar el mismo candado alrededor de él donde sea que se use, o de lo contrario se puede modificar al hacer esto. Si haces eso, has derrotado el punto de usar una ConcurrentStack.
agregado el autor Servy, fuente
Si planea revertir una pila con bastante frecuencia, en lugar de muy raramente, lo ideal sería utilizar una estructura subyacente diferente a la que usa C #. Probablemente desee utilizar una estructura de datos que pueda agregar/eliminar de manera eficiente en ambos extremos. Un Deque sería lo mejor, pero una matriz circular podría funcionar. Entonces puede simplemente tener un booleano que indique si es hacia delante o hacia atrás y simplemente voltearlo para invertir todo. Obviamente, la pila completa debería escribirse para que todos los métodos de acceso puedan elegir en qué final actuar.
agregado el autor Servy, fuente
@ Kevin nombré dos tipos diferentes de estructuras de datos. Que yo sepa, no hay nombre para una pila que invierte en qué lado lee/escribe; bien puede haber uno.
agregado el autor Servy, fuente
@millie Eso es mucho peor. Eso significa que alguien más puede agregar/eliminar elementos de la pila mientras está en el proceso de reversión. Eso es muy malo .
agregado el autor Servy, fuente
@Servy ¿Solo por curiosidad hay un nombre para este tipo de estructura de datos?
agregado el autor Kevin, fuente

1 Respuestas

Personalmente, si necesitaba tanta flexibilidad con una estructura de datos (y estaba preocupado por la eficiencia o la funcionalidad de las estructuras de datos que existen actualmente en el marco), solo escribiría la mía e incluiría los accesos necesarios y las propiedades de modificación del comportamiento que necesitaba. . De esa manera, siempre sabrá a dónde ir si no está funcionando según las expectativas.

0
agregado