variable una sirve que para nonlocal locales globales funciones example def multithreading rust ffi

multithreading - una - variables globales python 3



¿Cómo se accede a las variables globales locales locales en Rust? (1)

Para cada una de las siguientes implementaciones de almacenamiento local de subprocesos, ¿cómo se puede acceder a una variable de subproceso local local en los programas de Rust utilizando los mecanismos ffi estándar expuestos por el compilador o la biblioteca estándar?

  • C11
  • extensión tls de gcc
  • pthreads
  • API Windows TLS

Rust tiene una característica nocturna que permite vincular variables locales de hilo externo. La estabilización de la característica se rastrea aquí .

Extensión C11 / GCC TLS

C11 define la palabra clave _Thread_local para definir la duración del almacenamiento de subprocesos para un objeto. También existe un alias de macro thread_local .

GCC también implementa una extensión Thread Local que usa __thread como palabra clave.

La vinculación a una C11 _Thread_local y una gcc __thread variable es posible usando todas las noches (probado con rustc 1.17.0-nightly (0e7727795 2017-02-19) y gcc 5.4)

#![feature(thread_local)] extern crate libc; use libc::c_int; #[link(name="test", kind="static")] extern { #[thread_local] static mut test_global: c_int; } fn main() { let mut threads = vec![]; for _ in 0..5 { let thread = std::thread::spawn(|| { unsafe { test_global += 1; println!("{}", test_global); test_global += 1; } }); threads.push(thread); } for thread in threads { thread.join().unwrap(); } }

Esto permite obtener acceso a una variable declarada como cualquiera de las siguientes:

_Thread_local extern int test_global; extern __local int test_global;

La salida del código de Rust anterior será:

1 1 1 1 1

Que se espera, cuando la variable se define como hilo local.