diff --git a/src/dawn/common/SlabAllocator.cpp b/src/dawn/common/SlabAllocator.cpp
index 507eaee..7aed329 100644
--- a/src/dawn/common/SlabAllocator.cpp
+++ b/src/dawn/common/SlabAllocator.cpp
@@ -170,8 +170,6 @@
 }
 
 void* SlabAllocatorImpl::Allocate() {
-    std::lock_guard<std::mutex> lock(mMutex);
-
     if (mAvailableSlabs.next == nullptr) {
         GetNewSlab();
     }
@@ -197,7 +195,6 @@
     Slab* slab = reinterpret_cast<Slab*>(static_cast<char*>(firstAllocation) - mSlabBlocksOffset);
     ASSERT(slab != nullptr);
 
-    std::lock_guard<std::mutex> lock(mMutex);
     bool slabWasFull = slab->blocksInUse == mBlocksPerSlab;
     ASSERT(slab->blocksInUse != 0);
     PushFront(slab, node);
diff --git a/src/dawn/common/SlabAllocator.h b/src/dawn/common/SlabAllocator.h
index 69710fc..7542b42 100644
--- a/src/dawn/common/SlabAllocator.h
+++ b/src/dawn/common/SlabAllocator.h
@@ -16,7 +16,6 @@
 #define SRC_DAWN_COMMON_SLABALLOCATOR_H_
 
 #include <cstdint>
-#include <mutex>
 #include <type_traits>
 #include <utility>
 
@@ -159,7 +158,6 @@
         void Prepend(Slab* slab);
     };
 
-    std::mutex mMutex;
     SentinelSlab mAvailableSlabs;  // Available slabs to service allocations.
     SentinelSlab mFullSlabs;       // Full slabs. Stored here so we can skip checking them.
     SentinelSlab mRecycledSlabs;   // Recycled slabs. Not immediately added to |mAvailableSlabs| so
diff --git a/src/dawn/native/d3d11/BindGroupLayoutD3D11.cpp b/src/dawn/native/d3d11/BindGroupLayoutD3D11.cpp
index 0cfe3c9..a06df45 100644
--- a/src/dawn/native/d3d11/BindGroupLayoutD3D11.cpp
+++ b/src/dawn/native/d3d11/BindGroupLayoutD3D11.cpp
@@ -30,11 +30,11 @@
 
 Ref<BindGroup> BindGroupLayout::AllocateBindGroup(Device* device,
                                                   const BindGroupDescriptor* descriptor) {
-    return AcquireRef(mBindGroupAllocator.Allocate(device, descriptor));
+    return AcquireRef(mBindGroupAllocator->Allocate(device, descriptor));
 }
 
 void BindGroupLayout::DeallocateBindGroup(BindGroup* bindGroup) {
-    mBindGroupAllocator.Deallocate(bindGroup);
+    mBindGroupAllocator->Deallocate(bindGroup);
 }
 
 }  // namespace dawn::native::d3d11
diff --git a/src/dawn/native/d3d11/BindGroupLayoutD3D11.h b/src/dawn/native/d3d11/BindGroupLayoutD3D11.h
index 59d45d2..1205262 100644
--- a/src/dawn/native/d3d11/BindGroupLayoutD3D11.h
+++ b/src/dawn/native/d3d11/BindGroupLayoutD3D11.h
@@ -15,6 +15,7 @@
 #ifndef SRC_DAWN_NATIVE_D3D11_BINDGROUPLAYOUTD3D11_H_
 #define SRC_DAWN_NATIVE_D3D11_BINDGROUPLAYOUTD3D11_H_
 
+#include "dawn/common/MutexProtected.h"
 #include "dawn/common/SlabAllocator.h"
 #include "dawn/native/BindGroupLayoutInternal.h"
 #include "dawn/native/d3d11/BindGroupD3D11.h"
@@ -35,7 +36,7 @@
     BindGroupLayout(Device* device, const BindGroupLayoutDescriptor* descriptor);
     ~BindGroupLayout() override = default;
 
-    SlabAllocator<BindGroup> mBindGroupAllocator;
+    MutexProtected<SlabAllocator<BindGroup>> mBindGroupAllocator;
 };
 
 }  // namespace dawn::native::d3d11
diff --git a/src/dawn/native/d3d12/BindGroupLayoutD3D12.cpp b/src/dawn/native/d3d12/BindGroupLayoutD3D12.cpp
index 62c66b3..3c24d7b 100644
--- a/src/dawn/native/d3d12/BindGroupLayoutD3D12.cpp
+++ b/src/dawn/native/d3d12/BindGroupLayoutD3D12.cpp
@@ -164,7 +164,7 @@
     }
 
     Ref<BindGroup> bindGroup = AcquireRef<BindGroup>(
-        mBindGroupAllocator.Allocate(device, descriptor, viewSizeIncrement, viewAllocation));
+        mBindGroupAllocator->Allocate(device, descriptor, viewSizeIncrement, viewAllocation));
 
     if (GetSamplerDescriptorCount() > 0) {
         Ref<SamplerHeapCacheEntry> samplerHeapCacheEntry;
@@ -182,7 +182,7 @@
         mViewAllocator->Deallocate(viewAllocation);
     }
 
-    mBindGroupAllocator.Deallocate(bindGroup);
+    mBindGroupAllocator->Deallocate(bindGroup);
 }
 
 ityp::span<BindingIndex, const uint32_t> BindGroupLayout::GetDescriptorHeapOffsets() const {
diff --git a/src/dawn/native/d3d12/BindGroupLayoutD3D12.h b/src/dawn/native/d3d12/BindGroupLayoutD3D12.h
index d5df9ff..7357ddc 100644
--- a/src/dawn/native/d3d12/BindGroupLayoutD3D12.h
+++ b/src/dawn/native/d3d12/BindGroupLayoutD3D12.h
@@ -17,6 +17,7 @@
 
 #include <vector>
 
+#include "dawn/common/MutexProtected.h"
 #include "dawn/common/SlabAllocator.h"
 #include "dawn/common/ityp_stack_vec.h"
 #include "dawn/native/BindGroupLayoutInternal.h"
@@ -80,7 +81,7 @@
     std::vector<D3D12_DESCRIPTOR_RANGE1> mCbvUavSrvDescriptorRanges;
     std::vector<D3D12_DESCRIPTOR_RANGE1> mSamplerDescriptorRanges;
 
-    SlabAllocator<BindGroup> mBindGroupAllocator;
+    MutexProtected<SlabAllocator<BindGroup>> mBindGroupAllocator;
 
     StagingDescriptorAllocator* mSamplerAllocator = nullptr;
     StagingDescriptorAllocator* mViewAllocator = nullptr;
diff --git a/src/dawn/native/metal/BindGroupLayoutMTL.h b/src/dawn/native/metal/BindGroupLayoutMTL.h
index 8c859a7..f16256c 100644
--- a/src/dawn/native/metal/BindGroupLayoutMTL.h
+++ b/src/dawn/native/metal/BindGroupLayoutMTL.h
@@ -15,6 +15,7 @@
 #ifndef SRC_DAWN_NATIVE_METAL_BINDGROUPLAYOUTMTL_H_
 #define SRC_DAWN_NATIVE_METAL_BINDGROUPLAYOUTMTL_H_
 
+#include "dawn/common/MutexProtected.h"
 #include "dawn/common/SlabAllocator.h"
 #include "dawn/native/BindGroupLayoutInternal.h"
 
@@ -35,7 +36,7 @@
     BindGroupLayout(DeviceBase* device, const BindGroupLayoutDescriptor* descriptor);
     ~BindGroupLayout() override;
 
-    SlabAllocator<BindGroup> mBindGroupAllocator;
+    MutexProtected<SlabAllocator<BindGroup>> mBindGroupAllocator;
 };
 
 }  // namespace dawn::native::metal
diff --git a/src/dawn/native/metal/BindGroupLayoutMTL.mm b/src/dawn/native/metal/BindGroupLayoutMTL.mm
index a4f5de9..1c2fe64 100644
--- a/src/dawn/native/metal/BindGroupLayoutMTL.mm
+++ b/src/dawn/native/metal/BindGroupLayoutMTL.mm
@@ -32,11 +32,11 @@
 
 Ref<BindGroup> BindGroupLayout::AllocateBindGroup(Device* device,
                                                   const BindGroupDescriptor* descriptor) {
-    return AcquireRef(mBindGroupAllocator.Allocate(device, descriptor));
+    return AcquireRef(mBindGroupAllocator->Allocate(device, descriptor));
 }
 
 void BindGroupLayout::DeallocateBindGroup(BindGroup* bindGroup) {
-    mBindGroupAllocator.Deallocate(bindGroup);
+    mBindGroupAllocator->Deallocate(bindGroup);
 }
 
 }  // namespace dawn::native::metal
diff --git a/src/dawn/native/opengl/BindGroupLayoutGL.cpp b/src/dawn/native/opengl/BindGroupLayoutGL.cpp
index c0eb56d..cc77075 100644
--- a/src/dawn/native/opengl/BindGroupLayoutGL.cpp
+++ b/src/dawn/native/opengl/BindGroupLayoutGL.cpp
@@ -22,11 +22,11 @@
 
 Ref<BindGroup> BindGroupLayout::AllocateBindGroup(Device* device,
                                                   const BindGroupDescriptor* descriptor) {
-    return AcquireRef(mBindGroupAllocator.Allocate(device, descriptor));
+    return AcquireRef(mBindGroupAllocator->Allocate(device, descriptor));
 }
 
 void BindGroupLayout::DeallocateBindGroup(BindGroup* bindGroup) {
-    mBindGroupAllocator.Deallocate(bindGroup);
+    mBindGroupAllocator->Deallocate(bindGroup);
 }
 
 }  // namespace dawn::native::opengl
diff --git a/src/dawn/native/opengl/BindGroupLayoutGL.h b/src/dawn/native/opengl/BindGroupLayoutGL.h
index b77229a..996fb08 100644
--- a/src/dawn/native/opengl/BindGroupLayoutGL.h
+++ b/src/dawn/native/opengl/BindGroupLayoutGL.h
@@ -15,6 +15,7 @@
 #ifndef SRC_DAWN_NATIVE_OPENGL_BINDGROUPLAYOUTGL_H_
 #define SRC_DAWN_NATIVE_OPENGL_BINDGROUPLAYOUTGL_H_
 
+#include "dawn/common/MutexProtected.h"
 #include "dawn/common/SlabAllocator.h"
 #include "dawn/native/BindGroupLayoutInternal.h"
 #include "dawn/native/opengl/BindGroupGL.h"
@@ -32,7 +33,7 @@
 
   private:
     ~BindGroupLayout() override = default;
-    SlabAllocator<BindGroup> mBindGroupAllocator;
+    MutexProtected<SlabAllocator<BindGroup>> mBindGroupAllocator;
 };
 
 }  // namespace dawn::native::opengl
diff --git a/src/dawn/native/vulkan/BindGroupLayoutVk.cpp b/src/dawn/native/vulkan/BindGroupLayoutVk.cpp
index 03fdf56..4c45e68 100644
--- a/src/dawn/native/vulkan/BindGroupLayoutVk.cpp
+++ b/src/dawn/native/vulkan/BindGroupLayoutVk.cpp
@@ -176,13 +176,13 @@
     DescriptorSetAllocation descriptorSetAllocation;
     DAWN_TRY_ASSIGN(descriptorSetAllocation, mDescriptorSetAllocator->Allocate());
 
-    return AcquireRef(mBindGroupAllocator.Allocate(device, descriptor, descriptorSetAllocation));
+    return AcquireRef(mBindGroupAllocator->Allocate(device, descriptor, descriptorSetAllocation));
 }
 
 void BindGroupLayout::DeallocateBindGroup(BindGroup* bindGroup,
                                           DescriptorSetAllocation* descriptorSetAllocation) {
     mDescriptorSetAllocator->Deallocate(descriptorSetAllocation);
-    mBindGroupAllocator.Deallocate(bindGroup);
+    mBindGroupAllocator->Deallocate(bindGroup);
 }
 
 void BindGroupLayout::SetLabelImpl() {
diff --git a/src/dawn/native/vulkan/BindGroupLayoutVk.h b/src/dawn/native/vulkan/BindGroupLayoutVk.h
index 1aa6ff2..fead30d 100644
--- a/src/dawn/native/vulkan/BindGroupLayoutVk.h
+++ b/src/dawn/native/vulkan/BindGroupLayoutVk.h
@@ -17,6 +17,7 @@
 
 #include <vector>
 
+#include "dawn/common/MutexProtected.h"
 #include "dawn/common/SlabAllocator.h"
 #include "dawn/common/vulkan_platform.h"
 #include "dawn/native/BindGroupLayoutInternal.h"
@@ -70,7 +71,7 @@
 
     VkDescriptorSetLayout mHandle = VK_NULL_HANDLE;
 
-    SlabAllocator<BindGroup> mBindGroupAllocator;
+    MutexProtected<SlabAllocator<BindGroup>> mBindGroupAllocator;
     Ref<DescriptorSetAllocator> mDescriptorSetAllocator;
 };
 
diff --git a/src/dawn/tests/unittests/SlabAllocatorTests.cpp b/src/dawn/tests/unittests/SlabAllocatorTests.cpp
index 12c72d9..3e569f8 100644
--- a/src/dawn/tests/unittests/SlabAllocatorTests.cpp
+++ b/src/dawn/tests/unittests/SlabAllocatorTests.cpp
@@ -13,7 +13,6 @@
 // limitations under the License.
 
 #include <set>
-#include <thread>
 #include <vector>
 
 #include "dawn/common/Math.h"
@@ -180,51 +179,5 @@
     }
 }
 
-// Test many allocations and deallocations in a multithreaded environment.
-TEST(SlabAllocatorTests, AllocateDeallocateManyMultithread) {
-    static constexpr uint32_t kNumObjectsPerThread = 100;
-    static constexpr uint32_t kNumThreads = 10;
-
-    SlabAllocator<Foo> allocator(17 * sizeof(Foo));
-    auto f = [&] {
-        std::set<Foo*> objects;
-        std::set<Foo*> set2;
-
-        // Allocate many objects.
-        for (uint32_t i = 0; i < kNumObjectsPerThread; i++) {
-            Foo* object = allocator.Allocate(i);
-            EXPECT_TRUE(objects.insert(object).second);
-            if (i % 2 == 0) {
-                set2.insert(object);
-            }
-        }
-
-        // Deallocate every other object.
-        for (Foo* object : set2) {
-            allocator.Deallocate(object);
-            objects.erase(object);
-        }
-
-        // Allocate more objects.
-        for (uint32_t i = 0; i < kNumObjectsPerThread / 2; i++) {
-            Foo* object = allocator.Allocate(i);
-            EXPECT_TRUE(objects.insert(object).second);
-        }
-
-        // Deallocate the rest of the objects
-        for (Foo* object : objects) {
-            allocator.Deallocate(object);
-        }
-    };
-
-    std::vector<std::thread> threads;
-    for (uint32_t i = 0; i < kNumThreads; i++) {
-        threads.emplace_back(f);
-    }
-    for (uint32_t i = 0; i < kNumThreads; i++) {
-        threads[i].join();
-    }
-}
-
 }  // anonymous namespace
 }  // namespace dawn
