好文档 - 专业文书写作范文服务资料分享网站

linux多线程实验报告

天下 分享 时间: 加入收藏 我要投稿 点赞

《物联网工程领域应用综合实训》实验报告

if (shmptr == (void*)-1) {

perror(\!\\n\ exit(1); }

int count = 0; int j;

for(j = 0; j < N_WORKTIME; j++) {

waitSem(sem_id, SEM_EMPTY); waitSem(sem_id, MUTEX); sleep(get_random());

printf(\n\

printf(\我是第 %d 个生产者进程,PID = %d\\n\i + 1, getpid()); /*生产产品*/

char c = getRandChar(); //随机获取字母 shmptr -> str[shmptr->tail] = c;

shmptr -> tail = (shmptr->tail + 1) % MAX_BUFFER_SIZE; shmptr -> is_empty = 0; //写入新产品 shmptr -> num++; /*打印输出结果*/

printTime(); //程序运行时间 int p;

printf(\缓冲区数据(%d个):\打印缓冲区中的数据

p = (shmptr->tail-1 >= shmptr->head) ? (shmptr->tail-1) : (shmptr->tail-1 + MAX_BUFFER_SIZE);

11 / 18

《物联网工程领域应用综合实训》实验报告

for (p; !(shmptr -> is_empty) && p >= shmptr -> head; p--) {

printf(\ }

printf(\生产者 %d 放入 '%c'. \\n\

printf(\n\

fflush(stdout);

sigSem(sem_id, MUTEX); sigSem(sem_id, SEM_FULL); }

//将共享段与进程之间解除连接 shmdt(shmptr); exit(0); } }

for(i = 0; i < N_CONSUMER; i++) {

child = fork();

if(child < 0)//调用fork失败 {

perror(\ exit(1); }

else if(child == 0) {

int count = 0;

shmptr = shmat(shm_id, 0, 0); //将申请的共享内存附加到申请通信的

12 / 18

《物联网工程领域应用综合实训》实验报告

进程空间

if (shmptr == (void*)-1) {

perror(\!\\n\ exit(1); }

int j;

for(j = 0; j < N_WORKTIME; j++) {

waitSem(sem_id, SEM_FULL); waitSem(sem_id, MUTEX); sleep(get_random());

printf(\n\

printf(\我是第 %d 个消费者进程,PID = %d\\n\i + 1, getpid()); /*消费数据*/

char lt = shmptr -> str[shmptr -> head];

shmptr -> head = (shmptr -> head + 1) % MAX_BUFFER_SIZE; shmptr -> is_empty = (shmptr->head == shmptr->tail); // shmptr -> num--; /*打印输出结果*/

printTime(); //程序运行时间 int p;

printf(\缓冲区数据(%d个):\打印缓冲区中的数据

p = (shmptr -> tail - 1 >= shmptr -> head) ? (shmptr -> tail-1) : (shmptr -> tail - 1 + MAX_BUFFER_SIZE);

for (p; !(shmptr -> is_empty) && p >= shmptr -> head; p--)

13 / 18

《物联网工程领域应用综合实训》实验报告

{

printf(\ }

printf(\消费者 %d 取出 '%c'. \\n\

printf(\n\

fflush(stdout);

sigSem(sem_id,MUTEX); sigSem(sem_id,SEM_EMPTY); }

//将共享段与进程之间解除连接 shmdt(shmptr); exit(0); } }

//主进程最后退出

while (wait(0) != -1);

//将共享段与进程之间解除连接 shmdt(shmptr);

//对共享内存区执行控制操作

shmctl(shm_id,IPC_RMID,0);//当cmd为IPC_RMID时,删除该共享段 shmctl(sem_id,IPC_RMID,0); printf(\主进程运行结束!\\n\ fflush(stdout); exit(0); return 0; }

14 / 18

《物联网工程领域应用综合实训》实验报告

实验二:

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

#define N 5 //哲学家数量

#define LEFT(i) (i+N-1)%N //左手边哲学家编号 #define RIGHT(i) (i+1)%N //右手边哲家编号

#define HUNGRY 0 //饥饿 #define THINKING 1 //思考 #define EATING 2 //吃饭

#define U_SECOND 1000000 //1秒对应的微秒数 pthread_mutex_t mutex; //互斥量

int state[N]; //记录每个哲学家状态

//每个哲学家的思考时间,吃饭时间,思考开始时间,吃饭开始时间 clock_t thinking_time[N], eating_time[N], start_eating_time[N], start_thinking_time[N]; //线程函数

void *thread_function(void *arg);

int main() {

15 / 18

7r1hf43xsy37lyd0yjbf83hrt8bf8q008qk
领取福利

微信扫码领取福利

微信扫码分享