diff --git a/profiling/client/src/BufferManager.cpp b/profiling/client/src/BufferManager.cpp
index 42e3200..592d374 100644
--- a/profiling/client/src/BufferManager.cpp
+++ b/profiling/client/src/BufferManager.cpp
@@ -24,19 +24,25 @@
 IPacketBufferPtr BufferManager::Reserve(unsigned int requestedSize, unsigned int& reservedSize)
 {
     reservedSize = 0;
+#if !defined(ARMNN_DISABLE_THREADS)
     std::unique_lock<std::mutex> availableListLock(m_AvailableMutex, std::defer_lock);
+#endif
     if (requestedSize > m_MaxBufferSize)
     {
         return nullptr;
     }
+#if !defined(ARMNN_DISABLE_THREADS)
     availableListLock.lock();
+#endif
     if (m_AvailableList.empty())
     {
         if (m_CurrentNumberOfBuffers < m_MaxNumberOfBuffers)
         {
             // create a temporary overflow/surge buffer and hand it back
             m_CurrentNumberOfBuffers++;
+#if !defined(ARMNN_DISABLE_THREADS)
             availableListLock.unlock();
+#endif
             IPacketBufferPtr buffer = std::make_unique<PacketBuffer>(m_MaxBufferSize);
             reservedSize = requestedSize;
             return buffer;
@@ -44,25 +50,34 @@
         else
         {
             // we have totally busted the limit. call a halt to new memory allocations.
+#if !defined(ARMNN_DISABLE_THREADS)
             availableListLock.unlock();
+#endif
             return nullptr;
         }
     }
     IPacketBufferPtr buffer = std::move(m_AvailableList.back());
     m_AvailableList.pop_back();
+#if !defined(ARMNN_DISABLE_THREADS)
     availableListLock.unlock();
+#endif
     reservedSize = requestedSize;
     return buffer;
 }
 
 void BufferManager::Commit(IPacketBufferPtr& packetBuffer, unsigned int size, bool notifyConsumer)
 {
+#if !defined(ARMNN_DISABLE_THREADS)
     std::unique_lock<std::mutex> readableListLock(m_ReadableMutex, std::defer_lock);
+#endif
     packetBuffer->Commit(size);
+#if !defined(ARMNN_DISABLE_THREADS)
     readableListLock.lock();
+#endif
     m_ReadableList.push(std::move(packetBuffer));
+#if !defined(ARMNN_DISABLE_THREADS)
     readableListLock.unlock();
-
+#endif
     if (notifyConsumer)
     {
         FlushReadList();
@@ -82,9 +97,13 @@
 
 void BufferManager::Release(IPacketBufferPtr& packetBuffer)
 {
+#if !defined(ARMNN_DISABLE_THREADS)
     std::unique_lock<std::mutex> availableListLock(m_AvailableMutex, std::defer_lock);
+#endif
     packetBuffer->Release();
+#if !defined(ARMNN_DISABLE_THREADS)
     availableListLock.lock();
+#endif
     if (m_AvailableList.size() <= m_NumberOfBuffers)
     {
         m_AvailableList.push_back(std::move(packetBuffer));
@@ -98,14 +117,18 @@
             --m_CurrentNumberOfBuffers;
         }
     }
+#if !defined(ARMNN_DISABLE_THREADS)
     availableListLock.unlock();
+#endif
 }
 
 void BufferManager::Reset()
 {
     //This method should only be called once all threads have been joined
+#if !defined(ARMNN_DISABLE_THREADS)
     std::lock_guard<std::mutex> readableListLock(m_ReadableMutex);
     std::lock_guard<std::mutex> availableListLock(m_AvailableMutex);
+#endif
 
     m_AvailableList.clear();
     std::queue<IPacketBufferPtr>().swap(m_ReadableList);
@@ -115,12 +138,16 @@
 
 IPacketBufferPtr BufferManager::GetReadableBuffer()
 {
+#if !defined(ARMNN_DISABLE_THREADS)
     std::unique_lock<std::mutex> readableListLock(m_ReadableMutex);
+#endif
     if (!m_ReadableList.empty())
     {
         IPacketBufferPtr buffer = std::move(m_ReadableList.front());
         m_ReadableList.pop();
+#if !defined(ARMNN_DISABLE_THREADS)
         readableListLock.unlock();
+#endif
         return buffer;
     }
     return nullptr;
@@ -128,9 +155,13 @@
 
 void BufferManager::MarkRead(IPacketBufferPtr& packetBuffer)
 {
+#if !defined(ARMNN_DISABLE_THREADS)
     std::unique_lock<std::mutex> availableListLock(m_AvailableMutex, std::defer_lock);
+#endif
     packetBuffer->MarkRead();
+#if !defined(ARMNN_DISABLE_THREADS)
     availableListLock.lock();
+#endif
     if (m_AvailableList.size() <= m_NumberOfBuffers)
     {
         m_AvailableList.push_back(std::move(packetBuffer));
@@ -144,7 +175,9 @@
             --m_CurrentNumberOfBuffers;
         }
     }
+#if !defined(ARMNN_DISABLE_THREADS)
     availableListLock.unlock();
+#endif
 }
 
 void BufferManager::SetConsumer(IConsumer* consumer)
