Witam
piszę aplikację obsługującą kolka wątków na bibliotece pthread.h. Mam utworzoną klasę Drwal oraz zasób drzewaLas, oraz drzewaMagazyn. Chciałbym stworzyć dwa wątki drwala aby scinał drzewa i przenosił do magazynu. Kod wygląda następująco:
class Zasob
{
public:
Zasob(int ilosc){
this->ilosc = ilosc;
}
~Zasob(){}
void dodaj(){
mut_zasob.lock();
ilosc++;
mut_zasob.unlock();
}
int zwroc(){
int tmp;
mut_zasob.lock();
tmp = this->ilosc;
mut_zasob.unlock();
return tmp;
}
void zmniejsz()
{
mut_zasob.lock();
ilosc--;
mut_zasob.unlock();
}
private:
int ilosc;
mutex mut_zasob;
};
Zasob drzewaLas(1000);
Zasob drzewaMagazynLas(0);
class Drwal
{
private:
string coRobi;
public:
Drwal(){
this->coRobi = "W spoczynku";
}
~Drwal(){}
void setCoRobi(string WhatDo){
this->coRobi = WhatDo;
}
string getCoRobi(){
return this->coRobi;
}
void run(){
int losuj;
while (programDziala){
losuj = gen() % 1;
switch (losuj)
{
case 0:
//scinaj
drzewaLas.zmniejsz();
drzewaMagazynLas.dodaj();
this->coRobi = "Scina";
case 1:
//odpoczywa
this->coRobi = "PIWKO";
default:
break;
}
}
}
};
Moje pytanie brzmi: Jak utworzyć np. dwóch drwali, którzy będą ścianali drzewa?
Mam coś takiego:
int main()
{
pthread_t D1, D2;
int d1, d2;
Drwal d;
printf("In main: creating thread\n");
d1 = pthread_create(&D1, NULL, &Drwal::run, &d);
if(d1 != 0) {
printf("Error: pthread_create() failed\n");
exit(EXIT_FAILURE);
}
pthread_exit(NULL);
}
Lecz sypie mi się w momencie tworzenia wątku D1. Nie wiem jak przekazać funkcję rozpoczęcia wątku :/