基于线程的C语言电梯仿真

基于线程的C语言电梯仿真,c,multithreading,mutex,C,Multithreading,Mutex,您好,我是C语言的新手,想模拟电梯并使用线程作为乘客。 到目前为止,我能够正常运行电梯,但这是乘客的问题。 目的是让所有乘客(线程)选择一个随机的目的楼层(使用随机数生成器),电梯停在目的楼层,选择该楼层的相应乘客将走出电梯 这是代码。请帮忙 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<pthread.h> #include<u

您好,我是C语言的新手,想模拟电梯并使用线程作为乘客。 到目前为止,我能够正常运行电梯,但这是乘客的问题。 目的是让所有乘客(线程)选择一个随机的目的楼层(使用随机数生成器),电梯停在目的楼层,选择该楼层的相应乘客将走出电梯 这是代码。请帮忙

 #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    #include<pthread.h>
    #include<unistd.h>

    #define NUM_THREAD 2
    #define flr 7

    int current_floor;
    int dest_floor;
    int t,i;
    int df[flr];
    void *user();
    void elevator();
    void Thread_creats();
    pthread_mutex_t mymutex = PTHREAD_MUTEX_INITIALIZER; /*Mutex Initializer*/

    int main()
    {
        /*int el;   
        pthread_t elev1;
        //printf("Creating Elevator\n");
        el=pthread_create(&elev1,NULL, elevator, NULL);
        if(el)
        {
            printf("ERROR Creating Thread\n");
            exit(-1);
        }*/
        Thread_creats(); /*Calls the function that creates all the threads*/

        return 0;
    }
    /*Elevator Operation*/

    void elevator()
    {
        if(df[i]>current_floor)
        {
            printf("Direction ^\n");
            printf("   Up     |\n");
            while(current_floor!=df[i])
            {
                sleep(2);
                current_floor++;
                printf(" floor --> %d\n",current_floor);
            }
                printf("\n\n Door Open <--[ || ]-->\n\n");
                sleep(1);
                printf(" Passenger %d  Walks out....\n",t);
                sleep(1);
                printf("\n\n Door Close --> [|] <--\n\n");
        }
        else if(df[i]<current_floor)
        {
            printf(" Direction |\n");
            printf("   Down    V\n");

            while (df[i]!=current_floor)
            {
                sleep(1);
                current_floor--;
                printf(" floor --> %d\n", current_floor);
            }
            printf("\n\n Door Open <--[ || ]-->\n\n");
            sleep(1);
            printf(" Passenger %d Walks out....\n",t);
            sleep(1);
            printf("\n\n Door Close --> [|] <--\n\n");
        }
        else
        {
            sleep(1);
            printf(" You are at your destination floor...Please step out of the elevator\n\n");
            sleep(1);
            printf("\n\n Door Open <--[ || ]-->\n\n");
            sleep(1);
            printf(" Passenger %d Walks out....\n",t);
            sleep(1);
            printf("\n\n Door Close --> [|] <--\n\n");
        }   
    }


    void Thread_creats()
    {
        pthread_t thread[NUM_THREAD];
        int th;
            sleep(1);
            //printf("Creating Passenger %d \n",t);
            for(t=0;t<NUM_THREAD;t++)
            {
                th=pthread_create(&thread[NUM_THREAD],NULL,user,NULL);
                if(th)
                {
                    printf("ERROR Creating Thread\n");
                    exit(-1);
                }
            }
    }

    void *user()
    {

        for (i=0;i<flr;i++)
        {   
            pthread_mutex_lock(&mymutex);
            /*Initialize Seed Time*/
            srand(time(NULL));
            dest_floor=rand()%flr; /*Generates a random Floor number*/
            sleep(1);
            df[i]=dest_floor;
            printf("Passenger %d Selects floor: %d\n",t,df[i]);
            pthread_mutex_unlock(&mymutex);
        }

            pthread_exit(NULL);
            return NULL;
    }
#包括
#包括
#包括
#包括
#包括
#定义NUM_线程2
#定义flr 7
int当前_楼层;
内部目的层;
int t,i;
int-df[flr];
void*user();
无效电梯();
无效线程_创建();
pthread\u mutex\u t mymutex=pthread\u mutex\u初始值设定项/*互斥初始值设定项*/
int main()
{
/*INTEL;
pthread_t elev1;
//printf(“创建电梯”);
el=pthread_create(&elev1,NULL,电梯,NULL);
如果(el)
{
printf(“创建线程时出错\n”);
出口(-1);
}*/
Thread_creates();/*调用创建所有线程的函数*/
返回0;
}
/*电梯运行*/
无效电梯()
{
if(df[i]>当前楼层)
{
printf(“方向^\n”);
printf(“Up |\n”);
while(当前楼层=df[i])
{
睡眠(2);
当前楼层++;
printf(“楼层-->%d\n”,当前楼层);
}
printf(“\n\n门打开\n\n”);
睡眠(1);
printf(“乘客%d走出….\n”,t);
睡眠(1);
printf(“\n\n关门-->[|]%d\n”,当前楼层);
}
printf(“\n\n门打开\n\n”);
睡眠(1);
printf(“乘客%d走出….\n”,t);
睡眠(1);

printf(“\n\n关门-->[|][|]我不久前写了一个电梯模拟器,遇到了同样的问题

对我来说,最好的办法是:

电梯的1个螺纹:

callElevator(int level);
calcMovement();
openDoors(int level);
1个将所有乘客(服务员和乘客)保持在结构中的线程:

createNew(int orig, int dest);
exchange(int level); // called from elevator thread

但最大的问题不是总体组织。移动算法将是最难的事情。

这听起来像是家庭作业。你的问题是什么?我希望线程操作并选择随机目标。是的,这是家庭作业。