MCPcopy Create free account
hub / github.com/Simple-XX/SimpleKernel / BmallocLock

Class BmallocLock

src/memory/memory.cpp:34–57  ·  view source on GitHub ↗

* @brief bmalloc 线程安全锁(基于 SpinLock) * @details 在 Lock() 时关中断 + 原子自旋,保证 malloc/free * 在 timer 抢占和多核环境下的安全性。 */

Source from the content-addressed store, hash-verified

32 * 在 timer 抢占和多核环境下的安全性。
33 */
34class 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
59bmalloc::Bmalloc<BmallocLogger, BmallocLock>* allocator = nullptr;
60} // namespace

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected