资源简介

操作系统课程设计实验报告

资源截图

代码片段和文件信息

#include
#include
#include
#include
#include
#include
#include
#include

#define constumersCount 2   //消费者数目
#define producersCount 2    //生产者数目
#define bufferSize 5        //缓冲区大小
int buffer[bufferSize];     //定义缓冲区
int in=0;                  //下一个放入产品的缓冲区指针
int out=0;                 //下一个取出产品的缓冲区指针
int produceId=0;
int consumeId=0;
sem_t avaliableBuffers;       //信号量,可用空缓冲区
sem_t avaliableProducts;       //信号量,可用产品
pthread_mutex_t mutex;         //互斥信号量

pthread_t thread[constumersCount+producersCount];   //定义线程

/*
 * 消费者模型
 */
void *consume(void *arg)
{

    int num=(int)arg;
    while(1)
    {
        sem_wait(&avaliableProducts);  //可用产品减一
        pthread_mutex_lock(&mutex);    //加锁互斥信号量
        printf(“线程%d 开始读操作\n“num);
        consumeId=buffer[out];         //取出产品
        out=(out+1)%bufferSize;        //指针加一
        pthread_mutex_unlock(&mutex);   //解锁互斥信号量
        sem_post(&avaliableBuffers);    //可用空缓冲区加一
        printf(“线程%d结束读操作\n“num);
        sleep(1);

    }
    return NULL;


}
/*
 *生产者模型
 */
void *produce(void *arg)
{

    int num=(int)arg;
    while(1)
    {
        sem_wait(&avaliableBuffers);  //可用空缓冲区减一
        pthread_mutex_lock(&mutex);   //加锁
        printf(“线程%d 开始写操作\n“num);
        buffer[in]=produceId;          //将产品放入空缓冲区
        in=(in+1)%bufferSize;          //指针指向下一个可用空缓冲区
        pthread_mutex_unlock(&mutex);   //解锁
        printf(“线程%d 结束写操作\n“num);
        sem_post(&avaliableProducts);   //可用产品加一
        sleep(5);

    }
    return NULL;
}
int main(void)
{
     //初始化
    int i;
    sem_init(&avaliableBuffers0bufferSize);//可用空缓冲区初始为bufferSize
    sem_init(&avaliableProducts00);     //可用产品出是为0
    pthread_mutex_init(&mutexNULL);

    //创建消费者线程
    for(i=0; i    {
        pthread_create(&thread[i]NULLconsume(void*) i);
        printf(“线程%d发出读操作申请\n“i);
    }


    //创建生产者线程
    for(i=constumersCount; i    {
        pthread_create(&thread[i]NULLproduce(void *)i);
        printf(“线程%d发出写操作申请\n“i);
    }


    //pthread_join使一个线程等待另一个线程结束
    for(int i=0; i        pthread_join(thread[i]NULL);

    //销毁信号量
    sem_destroy(&avaliableBuffers);
    sem_destroy(&avaliableProducts);
    pthread_mutex_destroy(&mutex);
    return 0;

}



 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-07-03 16:49  OS课程设计\
     目录           0  2018-07-03 16:47  OS课程设计\OS课程设计代码\
     目录           0  2018-06-08 21:09  OS课程设计\OS课程设计代码\ProConsumer\
     目录           0  2018-06-08 21:09  OS课程设计\OS课程设计代码\ProConsumer\bin\
     目录           0  2018-06-02 10:17  OS课程设计\OS课程设计代码\ProConsumer\bin\Debug\
     文件        2765  2018-06-02 15:10  OS课程设计\OS课程设计代码\ProConsumer\main.cpp
     目录           0  2018-06-08 21:09  OS课程设计\OS课程设计代码\ProConsumer\obj\
     目录           0  2018-06-02 10:17  OS课程设计\OS课程设计代码\ProConsumer\obj\Debug\
     文件        1083  2018-06-02 10:01  OS课程设计\OS课程设计代码\ProConsumer\ProConsumer.cbp
     文件         357  2018-06-03 22:30  OS课程设计\OS课程设计代码\ProConsumer\ProConsumer.layout
     目录           0  2018-06-09 22:17  OS课程设计\OS课程设计代码\内存分配与跟踪\
     目录           0  2018-06-10 01:05  OS课程设计\OS课程设计代码\内存分配与跟踪\createData\
     目录           0  2018-06-08 21:09  OS课程设计\OS课程设计代码\内存分配与跟踪\createData\bin\
     目录           0  2018-06-09 22:00  OS课程设计\OS课程设计代码\内存分配与跟踪\createData\bin\Debug\
     文件      965708  2018-06-09 22:00  OS课程设计\OS课程设计代码\内存分配与跟踪\createData\bin\Debug\createData.exe
     文件        1115  2018-06-04 22:29  OS课程设计\OS课程设计代码\内存分配与跟踪\createData\createData.cbp
     文件         161  2018-06-09 21:57  OS课程设计\OS课程设计代码\内存分配与跟踪\createData\createData.depend
     文件         358  2018-06-10 01:05  OS课程设计\OS课程设计代码\内存分配与跟踪\createData\createData.layout
     文件         480  2018-06-09 22:00  OS课程设计\OS课程设计代码\内存分配与跟踪\createData\file.txt
     文件         997  2018-06-09 22:00  OS课程设计\OS课程设计代码\内存分配与跟踪\createData\main.cpp
     目录           0  2018-06-08 21:09  OS课程设计\OS课程设计代码\内存分配与跟踪\createData\obj\
     目录           0  2018-06-09 22:00  OS课程设计\OS课程设计代码\内存分配与跟踪\createData\obj\Debug\
     文件       11154  2018-06-09 22:00  OS课程设计\OS课程设计代码\内存分配与跟踪\createData\obj\Debug\main.o
     目录           0  2018-06-09 22:17  OS课程设计\OS课程设计代码\内存分配与跟踪\final\
     目录           0  2018-07-03 15:05  OS课程设计\OS课程设计代码\内存分配与跟踪\final\final\
     目录           0  2018-06-09 22:17  OS课程设计\OS课程设计代码\内存分配与跟踪\final\final\bin\
     目录           0  2018-06-10 14:52  OS课程设计\OS课程设计代码\内存分配与跟踪\final\final\bin\Debug\
     文件      975500  2018-06-10 14:52  OS课程设计\OS课程设计代码\内存分配与跟踪\final\final\bin\Debug\final.exe
     文件        1065  2018-06-10 01:05  OS课程设计\OS课程设计代码\内存分配与跟踪\final\final\final.cbp
     文件         201  2018-07-03 14:54  OS课程设计\OS课程设计代码\内存分配与跟踪\final\final\final.depend
     文件         358  2018-07-03 15:05  OS课程设计\OS课程设计代码\内存分配与跟踪\final\final\final.layout
............此处省略171个文件信息

评论

共有 条评论