Marco Calzana
/
ProducerConsumer
producer consumer for exercise 2
main.cpp
- Committer:
- mcalzana
- Date:
- 2018-11-28
- Revision:
- 0:c4887d97ba83
File content as of revision 0:c4887d97ba83:
#include "mbed.h" Mutex mutex; ConditionVariable cond(mutex); const int size = 3; int numberOfItems = 0; typedef struct{ int number; }message_t; MemoryPool<message_t, size> mpool; Queue<message_t, size> queue; void consumer(){ while(true){ wait(rand() % 3); mutex.lock(); if(numberOfItems > 0){ osEvent evt = queue.get(); message_t *message = (message_t*)evt.value.p; printf("number %d consumed", message->number); numberOfItems--; printf("Consumer. there are %d elements in queue\n", numberOfItems); mpool.free(message); }else{ printf("Consumer. queue is empty\n"); } cond.notify_all(); mutex.unlock(); } } int main() { Thread thread; thread.start(consumer); //Producer while(true){ wait(rand() % 3); mutex.lock(); if(numberOfItems < size){ message_t *message = mpool.alloc(); message->number = rand(); queue.put(message); numberOfItems++; printf("Producer. there are %d elements in queue\n", numberOfItems); }else{ printf("Producer. queue full\n"); } cond.notify_all(); mutex.unlock(); } }