/* 
 Neste exemplo uma execucao da thread writer deve sempre preceder a reader.
*/
#include <stdio.h>
#include <unistd.h>

#include "mythread.h"
#include "mutex.h"

void reader(mymutex_t* mtx);
void writer(mymutex_t* mtx);

mythread_t mythread_r;
mythread_t mythread_w;

int data[10];
int data_avail = 0;

int main()
{
    mythread_init(SCHED_RR);
    mymutex_t* mtx = mymutex_create();

    mythread_r = mythread_create((mythread_func)reader,(void*)mtx,0);
    mythread_w = mythread_create((mythread_func)writer,(void*)mtx,0);

    mythread_yield();

    return 0;
}

void reader(mymutex_t* mtx)
{
    while(1) {
        mymutex_lock(mtx);
        if (data_avail) {
            int i = 0;
            for (i = 0; i < 10; i++)
            {
                data[i]=i;
                printf("write %d (%d%) ", i, data[i]);
            }
        }
        data_avail=0;
        mymutex_unlock(mtx);
    }
}

void writer(mymutex_t* mtx) 
{
    while(1) {
        mymutex_lock(mtx);
        int i = 0;
        for (i = 0; i < 10; i++)
        {
            printf("read %d (%d%) ", i, data[i]);
        }
        data_avail=1;
        mymutex_unlock(mtx);
    }
}
