Articles of thread safety

¿Cómo crear una tarea (TPL) ejecutando un hilo STA?

Usar Thread es bastante sencillo Thread thread = new Thread(MethodWhichRequiresSTA); thread.SetApartmentState(ApartmentState.STA); ¿Cómo lograr el mismo uso de tareas en una aplicación WPF? Aquí hay un código: Task.Factory.StartNew ( () => {return “some Text”;} ) .ContinueWith(r => AddControlsToGrid(r.Result)); Obtengo una InvalidOperationException con El hilo que llama debe ser STA, porque muchos componentes de UI lo requieren.

¿Dónde obtengo un CollectionView seguro para subprocesos?

Al actualizar una colección de objetos comerciales en un hilo de fondo aparece este mensaje de error: Este tipo de CollectionView no admite cambios en su SourceCollection de un hilo diferente del hilo Dispatcher. Ok, eso tiene sentido. Pero también plantea la pregunta, ¿qué versión de CollectionView admite múltiples hilos y cómo hago que mis […]

¿Cómo aprovechar Qt para hacer que un método QObject sea seguro para subprocesos?

Supongamos que escribimos un método no const en una clase QObject -deriving: class MyClass : public QObject { int x; public: void method(int a) { x = a; // and possibly other things }; }; Queremos que ese método sea seguro para subprocesos, lo que significa que llamarlo desde un subproceso arbitrario, y desde varios […]

¿Por qué necesitamos Thread.MemoryBarrier ()?

En “C # 4 in a Nutshell”, el autor muestra que esta clase puede escribir 0 a veces sin MemoryBarrier , aunque no puedo reproducir en mi Core2Duo: public class Foo { int _answer; bool _complete; public void A() { _answer = 123; //Thread.MemoryBarrier(); // Barrier 1 _complete = true; //Thread.MemoryBarrier(); // Barrier 2 } […]

¿Las variables estáticas de la función son seguras para subprocesos en GCC?

En el código de ejemplo void foo() { static Bar b; … } comstackdo con GCC, ¿ está garantizado que b se creará e inicializará de manera segura para subprocesos? En la página man de gcc, se encuentra la opción de línea de comando -fno-threadsafe-static : No emita el código adicional para usar las rutinas […]

Colección observable de ejecución rápida y segura para hilos

ObservableCollection s eleva notificaciones para cada acción realizada en ellos. En primer lugar, no agregan ni quitan llamadas de forma masiva, en segundo lugar no son seguras para subprocesos. ¿Esto no los hace más lentos? ¿No podemos tener una alternativa más rápida? Algunos dicen que ICollectionView envuelto alrededor de un ObservableCollection es rápido? ¿Qué tan […]

¿Es seguro el hilo std :: vector o boost :: vector?

Tengo varios hilos simultáneamente llamando a push_back() en un objeto compartido de std::vector . ¿Es seguro el hilo std::vector ? ¿O necesito implementar el mecanismo yo mismo para que sea seguro? Quiero evitar realizar trabajos adicionales de “locking y liberación” porque soy un usuario de la biblioteca en lugar de un diseñador de la biblioteca. […]

¿Deberíamos usar EventQueue.invokeLater para cualquier actualización de GUI en una aplicación de escritorio Java?

Sé que al usar este método, el parámetro ejecutable se envía al sistema EventQueue. Pero, ¿deberían hacerse todas las actualizaciones de GUI utilizando este método? Quiero decir, si quiero decir, cambiar un texto de JButton, ¿debería usar algo como esto? java.awt.EventQueue.invokeLater(new Runnable() { public void run() { jButton1.setText(“changed text”); } }); Si debería usar este […]

¿La iteración de los valores de ConcurrentHashMap es segura?

En javadoc para ConcurrentHashMap es el siguiente: Las operaciones de recuperación (incluido get) generalmente no se bloquean, por lo que pueden superponerse con las operaciones de actualización (incluso poner y eliminar). Las recuperaciones reflejan los resultados de las operaciones de actualización completadas más recientemente que se mantienen desde su inicio. Para operaciones agregadas como putAll […]

Instrucciones de SSE: ¿qué CPU puede hacer operaciones de memoria atómica de 16B?

Considere la posibilidad de tener acceso a una sola memoria (una lectura única o una sola escritura, no lectura + escritura) en una CPU x86. La instrucción está accediendo a 16 bytes (128 bits) de memoria y la ubicación de la memoria a la que se accede está alineada con 16 bytes. El documento “Libro […]