Мне нужна локальная переменная потока, в идеале хранящаяся в структуре, которая в настоящее время хранит большую часть глобального состояния моей программы.
Первый способ сделать это - использовать макрос thread_local!
, однако я хотел бы сохранить этот поток локальным в моей структуре состояний.
Второй способ, которым я могу видеть чтобы достичь этого, нужно иметь HashMap<Thread,MyThreadLocalData>
или подобное между потоками и значением локальной переменной (переменных) моего потока. Затем я получу геттер, который использует thread::current
для поиска подходящего значения.
Последнее требование, которое я должен упомянуть, состоит в том, что не все потоки в данной программе создаются кодом Rust, но код Rust может быть работать в любом потоке, поэтому решения должны быть устойчивыми к этому.
Есть ли лучший способ сделать это? Возможно, есть threadId
, который позволил бы мне использовать простой Vec
вместо HashMap
(и / или избежать хэширования)? Есть ли библиотека для этого?
Другой вариант - изменить параметры каждой функции, которая может использоваться в многопоточном контексте, чтобы получить как структуру состояния, так и структуру состояния потока, однако это будет нелегко сработать. с темами, не созданными Rust.