diff --git a/vendor/magento/module-quote/Model/CustomerCartMutex.php b/vendor/magento/module-quote/Model/CustomerCartMutex.php
new file mode 100644
index 0000000000000..07853506920ec
--- /dev/null
+++ b/vendor/magento/module-quote/Model/CustomerCartMutex.php
@@ -0,0 +1,62 @@
+<?php
+/**
+ * Copyright 2026 Adobe
+ * All Rights Reserved.
+ */
+declare(strict_types=1);
+
+namespace Magento\Quote\Model;
+
+use Magento\Framework\Exception\CouldNotSaveException;
+use Magento\Framework\Lock\LockManagerInterface;
+use Magento\Store\Model\StoreManagerInterface;
+use Psr\Log\LoggerInterface;
+
+/**
+ * @inheritDoc
+ */
+class CustomerCartMutex implements CustomerCartMutexInterface
+{
+    private const LOCK_PREFIX = 'customer_cart_';
+    
+    private const LOCK_TIMEOUT = 60;
+
+    /**
+     * @param LockManagerInterface $lockManager
+     * @param LoggerInterface $logger
+     * @param StoreManagerInterface $storeManager
+     * @param int $lockWaitTimeout
+     */
+    public function __construct(
+        private readonly LockManagerInterface $lockManager,
+        private readonly LoggerInterface $logger,
+        private readonly StoreManagerInterface $storeManager,
+        private readonly int $lockWaitTimeout = self::LOCK_TIMEOUT
+    ) {
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function execute(int $customerId, int $storeId, callable $callable, array $args = []): mixed
+    {
+        $websiteId = $this->storeManager->getStore($storeId)->getWebsiteId();
+        $lockName = self::LOCK_PREFIX . $customerId . '_' . $websiteId;
+
+        if (!$this->lockManager->lock($lockName, $this->lockWaitTimeout)) {
+            $this->logger->critical(
+                'The customer cart is locked, the request has been aborted.'
+                . ' Customer ID: ' . $customerId . ', Store ID: ' . $storeId
+            );
+            throw new CustomerCartMutexException(
+                __('The customer cart is locked for processing. Please try again later.')
+            );
+        }
+
+        try {
+            return $callable(...$args);
+        } finally {
+            $this->lockManager->unlock($lockName);
+        }
+    }
+}
diff --git a/vendor/magento/module-quote/Model/CustomerCartMutexException.php b/vendor/magento/module-quote/Model/CustomerCartMutexException.php
new file mode 100644
index 0000000000000..6271116123c4a
--- /dev/null
+++ b/vendor/magento/module-quote/Model/CustomerCartMutexException.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Copyright 2026 Adobe
+ * All Rights Reserved.
+ */
+
+declare(strict_types=1);
+
+namespace Magento\Quote\Model;
+
+use Magento\Framework\Exception\StateException;
+
+class CustomerCartMutexException extends StateException
+{
+
+}
diff --git a/vendor/magento/module-quote/Model/CustomerCartMutexInterface.php b/vendor/magento/module-quote/Model/CustomerCartMutexInterface.php
new file mode 100644
index 0000000000000..16d4cb40354fd
--- /dev/null
+++ b/vendor/magento/module-quote/Model/CustomerCartMutexInterface.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Copyright 2026 Adobe
+ * All Rights Reserved.
+ */
+declare(strict_types=1);
+
+namespace Magento\Quote\Model;
+
+use Magento\Framework\Exception\StateException;
+
+/**
+ * Intended to prevent race conditions during customer cart creation by concurrent requests.
+ */
+interface CustomerCartMutexInterface
+{
+    /**
+     * Acquires a lock for customer cart creation, executes callable and releases the lock after.
+     *
+     * @param int $customerId
+     * @param int $storeId
+     * @param callable $callable
+     * @param array $args
+     * @return mixed
+     * @throws StateException
+     */
+    public function execute(int $customerId, int $storeId, callable $callable, array $args = []): mixed;
+}
diff --git a/vendor/magento/module-quote/Model/QuoteManagement.php b/vendor/magento/module-quote/Model/QuoteManagement.php
index 4c488b4931886..16964fa7aad5f 100644
--- a/vendor/magento/module-quote/Model/QuoteManagement.php
+++ b/vendor/magento/module-quote/Model/QuoteManagement.php
@@ -18,6 +18,7 @@
 use Magento\Framework\Api\DataObjectHelper;
 use Magento\Framework\App\ObjectManager;
 use Magento\Framework\App\RequestInterface;
+use Magento\Quote\Model\CustomerCartMutexInterface;
 use Magento\Framework\Event\ManagerInterface as EventManager;
 use Magento\Framework\Exception\CouldNotSaveException;
 use Magento\Framework\Exception\LocalizedException;
@@ -183,6 +184,11 @@ class QuoteManagement implements CartManagementInterface, ResetAfterRequestInter
      */
     private $cartMutex;
 
+    /**
+     * @var CustomerCartMutexInterface
+     */
+    private $customerCartMutex;
+
     /**
      * @param EventManager $eventManager
      * @param SubmitQuoteValidator $submitQuoteValidator
@@ -210,6 +216,7 @@ class QuoteManagement implements CartManagementInterface, ResetAfterRequestInter
      * @param RemoteAddress|null $remoteAddress
      * @param LockManagerInterface $lockManager
      * @param CartMutexInterface|null $cartMutex
+     * @param CustomerCartMutexInterface|null $customerCartMutex
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
@@ -239,7 +246,8 @@ public function __construct(
         ?RequestInterface $request = null,
         ?RemoteAddress $remoteAddress = null,
         ?LockManagerInterface $lockManager = null,
-        ?CartMutexInterface $cartMutex = null
+        ?CartMutexInterface $cartMutex = null,
+        ?CustomerCartMutexInterface $customerCartMutex = null
     ) {
         $this->eventManager = $eventManager;
         $this->submitQuoteValidator = $submitQuoteValidator;
@@ -271,6 +279,8 @@ public function __construct(
             ->get(RemoteAddress::class);
         $this->cartMutex = $cartMutex
             ?? ObjectManager::getInstance()->get(CartMutexInterface::class);
+        $this->customerCartMutex = $customerCartMutex
+            ?? ObjectManager::getInstance()->get(CustomerCartMutexInterface::class);
     }
 
     /**
@@ -299,7 +309,30 @@ public function createEmptyCart()
      */
     public function createEmptyCartForCustomer($customerId)
     {
-        $storeId = $this->storeManager->getStore()->getStoreId();
+        $store = $this->storeManager->getStore();
+        try {
+            return $this->customerCartMutex->execute(
+                (int)$customerId,
+                (int)$store->getStoreId(),
+                \Closure::fromCallable([$this, 'createEmptyCartForCustomerRun']),
+                [(int)$customerId, (int)$store->getStoreId()]
+            );
+        } catch (CustomerCartMutexException $e) {
+            throw new CouldNotSaveException(__("The quote can't be created."), $e);
+        }
+    }
+
+    /**
+     * Creates an empty cart for the customer, called within the customer cart mutex.
+     *
+     * @param int $customerId
+     * @param int $storeId
+     * @return int
+     * @throws CouldNotSaveException
+     * @SuppressWarnings(PHPMD.UnusedPrivateMethod)
+     */
+    private function createEmptyCartForCustomerRun(int $customerId, int $storeId): int
+    {
         $quote = $this->createCustomerCart($customerId, $storeId);
 
         $this->_prepareCustomerQuote($quote);
diff --git a/vendor/magento/module-quote/etc/di.xml b/vendor/magento/module-quote/etc/di.xml
index 0a683205a90da..f4fbdf5433dc5 100644
--- a/vendor/magento/module-quote/etc/di.xml
+++ b/vendor/magento/module-quote/etc/di.xml
@@ -46,6 +46,7 @@
     <preference for="Magento\Quote\Model\ValidationRules\QuoteValidationRuleInterface" type="Magento\Quote\Model\ValidationRules\QuoteValidationComposite\Proxy"/>
     <preference for="Magento\Quote\Model\QuoteMutexInterface" type="Magento\Quote\Model\QuoteMutex"/>
     <preference for="Magento\Quote\Model\CartMutexInterface" type="Magento\Quote\Model\CartMutex"/>
+    <preference for="Magento\Quote\Model\CustomerCartMutexInterface" type="Magento\Quote\Model\CustomerCartMutex"/>
     <preference for="Magento\Quote\Model\CartAddressMutexInterface" type="Magento\Quote\Model\CartAddressMutex"/>
     <preference for="Magento\Quote\Model\Quote\Item\Option\ComparatorInterface" type="Magento\Quote\Model\Quote\Item\Option\Comparator"/>
     <preference for="Magento\Quote\Model\Cart\ProductReaderInterface" type="Magento\Quote\Model\Cart\ProductReader"/>
