boost named_condition не вызывает процесс ожидания

У меня есть 2 процесса (производитель и потребитель), совместно использующих деку int в разделяемой памяти, у меня процесс продюсера помещает в деку 2 числа, а затем он переходит в состояние ожидания, теряя блокировку мьютекса. Затем потребительский процесс удаляет числа и печатает их. Затем он уведомляет об условии, которого ожидает производитель. Затем потребитель уходит в ожидании второго условия. После этого случая продюсер не просыпается. Я использую один и тот же мьютекс между процессами. Пожалуйста, найдите весь код ниже.

Включить файл shared_memory.h:

#ifndef SharedMemory_h
#define SharedMemory_h

#include 
#include 
#include 
#include 
#include 
#include 

using namespace boost::interprocess;

typedef allocator ShmemAllocator;
typedef deque Deque;

#endif 

Производственный процесс:

#include "shared_memory.h"

struct shm_remove
{
    shm_remove() { shared_memory_object::remove("MySharedMemory"); }
    ~shm_remove() { shared_memory_object::remove("MySharedMemory"); }
} remover;

struct mutex_remove
{
    mutex_remove() { named_mutex::remove("MyMutex"); }
    ~mutex_remove() { named_mutex::remove("MyMutex"); }
} mutex_remover;

//Create shared memory, mutex and condtion
managed_shared_memory segment(create_only, "MySharedMemory", 10000000);
named_mutex mutex(create_only,"MyMutex");
named_condition full(open_or_create,"FullCondition");
named_condition empty(open_or_create,"EmptyCondition");

const ShmemAllocator alloc_inst (segment.get_segment_manager());


int main() 
{
    Deque* MyDeque;
    offset_ptr a, b;
    try{
        MyDeque = segment.construct("MyDeque")(alloc_inst);
        try{
           a = static_cast (segment.allocate(sizeof(int)));
           b = static_cast (segment.allocate(sizeof(int)));
        }catch(bad_alloc &ex){
             std::cout < "Could not allocate int" < std::endl;
        }
    }catch(bad_alloc &ex){
        std::cout < "Could not allocate queue" < std::endl;
    }
    scoped_locksize() == 2)
         {
             std::cout < "Consumer: " < *MyDeque->front() < std::endl;
             MyDeque->pop_front();
         }

         if (MyDeque->size() == 1)
         {
             std::cout < "Consumer: " < *MyDeque->front() < std::endl;
             MyDeque->pop_front();
             full.notify_one();
         }
    }
}

Ответы на вопрос(1)

Ваш ответ на вопрос