* @brief bmalloc 线程安全锁(基于 SpinLock) * @details 在 Lock() 时关中断 + 原子自旋,保证 malloc/free * 在 timer 抢占和多核环境下的安全性。 */
| 32 | * 在 timer 抢占和多核环境下的安全性。 |
| 33 | */ |
| 34 | class BmallocLock : public bmalloc::LockBase { |
| 35 | public: |
| 36 | void Lock() override { |
| 37 | lock_.Lock().or_else([](auto&&) -> Expected<void> { |
| 38 | // 不应触发:bmalloc 内部不会递归加锁 |
| 39 | while (true) { |
| 40 | cpu_io::Pause(); |
| 41 | } |
| 42 | return {}; |
| 43 | }); |
| 44 | } |
| 45 | |
| 46 | void Unlock() override { |
| 47 | lock_.UnLock().or_else([](auto&&) -> Expected<void> { |
| 48 | while (true) { |
| 49 | cpu_io::Pause(); |
| 50 | } |
| 51 | return {}; |
| 52 | }); |
| 53 | } |
| 54 | |
| 55 | private: |
| 56 | SpinLock lock_{"bmalloc"}; |
| 57 | }; |
| 58 | |
| 59 | bmalloc::Bmalloc<BmallocLogger, BmallocLock>* allocator = nullptr; |
| 60 | } // namespace |
nothing calls this directly
no outgoing calls
no test coverage detected