PDA

View Full Version : درخواست راهنمایی در مورد اجرای یک برنامه



clapton
جمعه 24 آذر 1391, 00:50 صبح
سلام دوستان.من دارم یه برنامه ای می نویسم برای ورود و خروج یه پارکینگ.بعد از کلی تجزیه و تحلیل این برنامه رو نوشتم اما برنامه ام کمپایل میشه اما اجرا نمیشه.البته برنامه رو تو محیط لینوکس فقط میشه اجرا کرد.از یه سری از دستورات سمافورن و موتکس استفاده کردم.و چند تا تسک ایجاد کردم برای ورود و خروج و یه کیبور که ورود و خروج رو باهاش تعیین میکنیم اما وقتی اجراش میکنم هر چه کلید E یا S برای ورود و خروج رو میزنم هیچ اتفاقی نمیافته.ممنون میشم اگر راهنمایی کنید.
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
#include <pthread.h>
#include <semaphore.h>

#define TRUE 1
#define FALSE 0

int places=10;
sem_t evt_in,evt_out,evt_maj;
int fin=FALSE;
pthread_mutex_t mutex_pl;
pthread_cond_t cond_places ;

void * t_keyboard(void *arg){

char res;
res=getchar();

while (fin!=TRUE){
if(res=='f'){
fin=TRUE;}
else { if( res=='e'){
sem_post(&evt_in);}
else { if (res=='s'){
sem_post(&evt_out);
}
}
}


}
}




void * t_enter (void *arg){
while (fin!=TRUE){
sem_wait(&evt_in);
pthread_mutex_lock(&mutex_pl);
if (places==0){
pthread_cond_wait(&cond_places, &mutex_pl);
}
printf(" barrier opening(IN)");
places = places -1;
sem_post(&evt_maj);
pthread_mutex_unlock(&mutex_pl);
}
}




void * t_exit (void *arg){

while (fin!=TRUE){
sem_wait(&evt_out);
pthread_mutex_lock(&mutex_pl);
if (places==0){
pthread_cond_wait(&cond_places, &mutex_pl);
}
printf("barrier opening IN");
places = places -1;
sem_post(&evt_maj);
pthread_mutex_unlock(&mutex_pl);
}
}




void * t_display (void *arg){

while (fin!= TRUE) {
sem_wait(&evt_maj);
pthread_mutex_lock(&mutex_pl);
printf ("places = %d",places);
pthread_mutex_unlock(&mutex_pl);
}
}

int main() {

/* declarations */

pthread_t thread_keyboard,thread_enter,thread_exit,thread_di splay;

int ikeyboard,ienter, iexit, idisplay;

pthread_mutex_init(&mutex_pl,NULL);
pthread_cond_init(&cond_places,0);
sem_init(&evt_in,0,0);
sem_init(&evt_out,0,0);
sem_init(&evt_maj,0,0);


iclavier=pthread_create( &thread_keyboard, NULL,&t_keyboard,NULL);
ientree=pthread_create( &thread_enter, NULL,&t_enter,NULL);
isortie=pthread_create( &thread_exit, NULL,&t_exit,NULL);
iaffichage=pthread_create( &thread_display, NULL,&t_display,NULL);



pthread_join( thread_keyboard, NULL);
pthread_join( thread_enter, NULL);
pthread_join( thread_display, NULL);
pthread_join( thread_exit, NULL);


exit(0);


}

aidinMC
جمعه 24 آذر 1391, 01:37 صبح
اول از همه چرا نوع تابع main رو مشخص نکردین؟
تو کد از s و e کوچیک استفاده کردین ، اگه S و E بزنید خب نمیشناسه دیگه...

clapton
جمعه 24 آذر 1391, 12:34 عصر
نوع تابع رو هم مشخص کردم بازم جواب نمیگریم.اول با E و S بزرگ تعرف کرده بودم اما کار نمیکرد عوضش کردم.

aidinMC
جمعه 24 آذر 1391, 12:40 عصر
متاسفانه سیستم عامل من ویندوز هستش نمیتونم دیباگ کنم ، میسپارم به دوستان :)