mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-02 21:17:39 +00:00
![]() make `mk_attr_id` part of `ParseSess` Updates #48685 The current `mk_attr_id` uses the `AtomicU32` type, which is not very efficient and adds a lot of lock contention in a parallel environment. This PR refers to the task list in #48685, uses `mk_attr_id` as a method of the `AttrIdGenerator` struct, and adds a new field `attr_id_generator` to `ParseSess`. `AttrIdGenerator` uses the `WorkerLocal`, which has two advantages: 1. `Cell` is more efficient than `AtomicU32`, and does not increase any lock contention. 2. We put the index of the work thread in the first few bits of the generated `AttrId`, so that the `AttrId` generated in different threads can be easily guaranteed to be unique. cc `@cjgillot` |
||
---|---|---|
.. | ||
attr_wrapper.rs | ||
attr.rs | ||
diagnostics.rs | ||
expr.rs | ||
generics.rs | ||
item.rs | ||
mod.rs | ||
nonterminal.rs | ||
pat.rs | ||
path.rs | ||
stmt.rs | ||
ty.rs |