#include <libthreadar/libthreadar.hpp>
const int cond_full = 0;
const int cond_empty = 1;
condition verrou(2);
const int resource_max_size = 10;
std::deque<int> resource;
void thread1::routine()
{
while(true)
{
verrou.lock();
if(resource.empty())
verrou.wait(cond_empty);
cout << resource.front(); << endl;
resource.pop_front();
verrou.signal(cond_full);
verrou.unlock();
}
}
void thread2::routine()
{
int counter = 0;
while(true)
{
verrou.lock();
if(resource.size() > resource_max_size)
verrou.wait(cond_full);
resource.push_back(++counter);
verrou.signal(cond_empty);
verrou.unlock();
}
}