Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
*******************************************************************************/
#include <iostream>
#include <thread>
#include <mutex>
#include <queue>
using namespace std;
mutex mutex_filosofi;
bool betisoare[5];
queue<int> coada;
void gestionare_coada()
{
int id_filosof = -1;
while(true)
{
if(coada.size() > 0)
{
id_filosof = coada.front();
coada.pop();
thread thread_object_1(comportament_filosof, id_filosof);
thread_object_1.detach();
}
}
}
if(id_filosof == 4)
{
indice_stang = 4;
indice_drept = 0;
}
else
{
indice_stang = id_filosof;
indice_drept = id_filosof+1;
}
//action
bool a_mancat = false;
while(a_mancat == false)
{
mutex_filosofi.lock();
//cout<<indice_stang<<" "<<betisoare[indice_stang]<<" "<<indice_drept<<"
"<<betisoare[indice_drept]<<endl;
if(betisoare[indice_stang] == 1 || betisoare[indice_drept] == 1)
{
continue;
}
if(betisor_stang == 0)
{
if(betisoare[indice_stang] == 0)
{
betisor_stang = 1;
betisoare[indice_stang] = 1;
}
}
if(betisor_drept == 0)
{
if(betisoare[indice_drept] == 0)
{
betisor_drept = 1;
betisoare[indice_drept] = 1;
}
}
coada.push(id_filosof);
}
mutex_filosofi.unlock();
}
}
int main()
{
coada.push(0);
coada.push(1);
coada.push(2);
coada.push(3);
coada.push(4);
thread thread_object_1(gestionare_coada);
thread_object_1.join();
return 0;
}