Столовые философы и инициализация мьютекса

Я пытаюсь решить проблему обедающих философов. Итак, я в значительной степени создал весь код, но проблема в том, что я не могу инициализировать мониторы (я создал псевдокод, который я переписал на c ++), поэтому на самом деле я не могу протестировать программу , Кто-нибудь может мне помочь и сказать, в чем проблема с инициализацией monitor / mutex_init?

Я получаю ошибку в строке 18, и это выглядит так:
ошибка: int pthread_mutex_init объявлен как символ другого типа

изменяя его на int pthread_mutex_init (&монитор, NULL); Не будет работать!

добавляя
int pthread_mutex_init (pthread_mutex_t * monitor, NULL);

Я получаю сообщение об ошибке: ожидаемый идентификатор до ‘__null’

#include <iostream>
#include <cstdio>
#include <pthread.h>
#include <cstdlib>
#include <unistd.h>

using namespace std;char v_filozofi[5]={'O'};   //vizualni prikaz filozofa
int stapic[5]={1};          //stapici za filozofe
int broj[5];                //shema koju sam mora sloziti da imam broj filozofa

pthread_t       d_filozofi[5]; //dretve filozofa,philosopher's thread
pthread_cond_t  red_uvjeta[5];
pthread_mutex_t monitor;        //deklariramo monitor,tj mymutex

int pthread_mutex_init(*monitor,NULL);

void ispisi_stanje(int n){
for(int i = 0; i < 5 ;i++)  cout<< v_filozofi[i];
cout<<"("<< n+1 << ")" <<endl;
}

void misliti(int n){
cout<<"Mislim " << endl;
sleep(4);
}

void jesti(int n){
pthread_mutex_lock(&monitor);
v_filozofi[n]='o';
while(stapic[n]==0 || stapic[n+1]%5==0){//gleda ima li lijevi i desni
//stapic na raspolaganju
pthread_cond_wait(&red_uvjeta[n],&monitor);
}
stapic[n] = stapic[(n+1)%5] = 0;
v_filozofi[n] = 'X';

ispisi_stanje(n);

pthread_mutex_unlock(&monitor);
sleep(2);
pthread_mutex_lock(&monitor);
v_filozofi[n] = 'O';

stapic[n] = stapic[(n+1)%5] = 1;

pthread_cond_signal(&red_uvjeta[(n-1)%5]);
pthread_cond_signal(&red_uvjeta[(n+1)%5]);

ispisi_stanje(n);
pthread_mutex_unlock(&monitor);}

void * filozof(void *n){
int br_fil = *((int *)n);
while(1){
misliti(br_fil);
jesti(br_fil);
}
return 0;
}

//MAIN
int main(){
for(int i=0;i<5;i++){
broj[i] = i;
pthread_cond_init(&red_uvjeta[i],NULL);
}
for(int i=0;i<5;i++){
sleep(1);
pthread_create( &d_filozofi[i],NULL,filozof,&broj[i]);
}

for(int i=0;i<5;i++) pthread_join(d_filozofi[i],NULL);
pthread_mutex_destroy(&monitor);

return 0;
}

0

Решение

удалить строку

int pthread_mutex_init(*monitor,NULL);

и вместо этого

pthread_mutex_init(&monitor,NULL);

в начале вашей основной функции. (и убедитесь, что он возвращает 0)

Так как вы объявляете функцию не вызывающей ее, а так как она уже объявлена, вы получаете ошибку

1

Другие решения

Эта функция ожидает указатель, и почему вы поставили «int» перед вызовом? Я думаю, что вы перепутали прототип (который не нужен) и реальный вызов функции.

int pthread_mutex_init(*monitor,NULL);

Так:

pthread_mutex_init(&monitor,NULL);

http://pubs.opengroup.org/onlinepubs/7908799/xsh/pthread_mutex_init.html

0

однажды взглянуть на этот приятно дано

http://nitish712.blogspot.in/search/label/mutex

http://nitish712.blogspot.in/2012/09/classical-ipc-problems.html

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector