⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 代码.txt

📁 在linux环境下实现操作系统的读者-写者问题.读者写者随机访问.
💻 TXT
字号:
#include "semaphore.h"
#include "pthread.h"
#include "stdio.h"
#include "sys/time.h"
#include "stdlib.h"

#define readernumber 10;
#define writernumber 3;

pthread_mut_t  mut;
sem_t full[20];

int readcount;
int buf[20];
int i,b,m;
int t[20];
int number;

void *Reader(void *param)
{
        int p;
        int du;
        p = *(int *)param;

        tail = rand()%20;

        readcount = readcount + 1;
        sem_wait(&full[du]);
        pthread_mut_lock(&mut);
        printf("the reader %d is reading the buffer[%d]\n",p,du);
        printf("%d has been readed\n",buffer[du]);

        pthread_mut_unlock(&mut);

        readcount = readcount - 1;
        sleep(3);
}
void *Writer( void *p)
{
        int w_number;
        int h;
        while(1)
        {
                pthread_mut_lock(&mut);
                b = 1;
		if(number==20)
			break;
                head = rand()%20;
                if(t[head] == 0)
                {
                        w_number = *(int *)p;
			number++;
                        buf[h] = rand();
                        t[h] = 1;
                        sem_post(&full[head]);
                        printf("the writer %d has writed the number %d into the buffer[%d]\nThe content of the buffer:\n",w_number,h+1,h);

                        for(i = 0;i<20;i++)
                                printf("%d ",buffer[i]);
                        printf("\n");
                }
                pthread_mut_unlock(&mut);
                sleep(2);
        }
}
main()
{
        int temp;
        int i,j;
        int wno,rno;
        pthread_t t[15];
        pthread_mut_init(&mut,NULL);
        srand((unsigned int)time(NULL));
	number = 0;
        j = 0;
        for(i = 0;i<10;i++)
        {       t[i] = 0;
                buffer[i] = 0;
                sem_init(&full[i],0,0);
        }
        for(i = 0;i<10;i++)
        {       if(i<3)
                {
                        temp = pthread_create(&t[j],NULL,Writer,(void *)&i);
                        if(0!=temp)
                        {
                                printf("create error!\n");
                        }
                        j = j + 1;
                    
                }
                else
                {
                        temp = pthread_create(&t[i],NULL,Reader,(void *)&i);
                }
        }
        for(i = 0;i<13;i++)
        {
                pthread_join(t[i],NULL);
        }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -