PDA

View Full Version : سوال: سمافور



zahra.mf
یک شنبه 25 دی 1390, 18:37 عصر
سلام
یه برنامه نوشتم که باید هماهنگیش با سمافور انجام بشه برنامه اینطوریه که دانشجوها باید از استاد سوال بپرسن فقط سه تا دانشجو میتونن تو اتاق استاد باشن و فقط یه دانشجو میتونه از استاد سوال بپرسه زمان سوال پرسیدن هر دانشجو هم به صورت رندوم بین صفر تا دو ثانیه باید طول بکشه من برنامش و نوشتم توی زمان پرسش مشکل دارم که باید بین صفر تا دو ثانیه باشه نمیدونم چه جوری و کجای برنامه و ... باید بذارمش اصلا از چه تابعی باید استفاده کنم!!برنامه یه مشکل دیگه که داره اینه که وقتی برا دانشجوها شماره میذارم خیلی ناجور اجرا میشه!(این برنامه رو باید تو محیط لینوکس اجرا کنم)

#include <stdlib.h>
#include <pthread.h>
#include <stdio.h>
#include <semaphore.h>
#include <iostream>
using namespace std;
sem_t r,t;
int i;
void *sem(void*);

int main(int argc,char *argv[])
{sem_init(&r,0,3);
sem_init(&t,0,1);
int n=atoi(argv[1]);
pthread_t *threads;
threads=new pthread_t[n];
for(int i=1;i<=n;i++){

pthread_create(&threads[i],NULL,sem,NULL);

}
for(int i=1;i<=n;i++){

pthread_join(threads[i],NULL);
}
return 0;
}
void *sem(void*)
{
cin>>i;
sem_wait(&r);
cout<<"student entered the room:"<<endl;
sem_wait(&t);
cout<<"student asking the quastion:"<<endl;
sem_post(&t);
cout<<"student thanking "<<endl;
sem_post(&r);
cout<<"student exit the room"<<endl;
pthread_exit(0);
}