我想解決就餐哲學家問題。所以我幾乎做了整個代碼,但問題是我不能初始化監視器(我已經制作了僞代碼,我用C++重新編寫)如此真的我無法測試該程序。任何人都可以幫助我說明monitor/mutex_init的初始化有什麼問題嗎?餐飲哲學家和互斥體初始化
我得到錯誤第18行,它是這樣: 錯誤:爲不同類型的符號
其更改爲INT調用pthread_mutex_init(&顯示器,NULL)的「廉政調用pthread_mutex_init」重新聲明; 將無法正常工作!
加入 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;
}
這是正確的,但不是 調用pthread_mutex_init(*監視器,NULL); 我把主要 調用pthread_mutex_init (&monitor,NULL); 它的工作。TNX! – T0plomj3r
那麼,正是我之前寫的... – Maresh