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

📄 sem.c

📁 liunx下的shell实现;进程、线程同步的实现;I/O系统调用的比较(mmap)——操作系统的课程设计
💻 C
字号:
#include<sys/types.h>#include<sys/ipc.h>#include<sys/sem.h>union semun{  int val;  struct semid_ds *buf;  unsigned short *array;};int get_sem_val(int sid,int semnum){  return (semctl(sid,semnum,GETVAL,0));}void set_a_sem(int sid,int semnum,int initval){  union semun semopts;  semopts.val=initval;  semctl(sid,semnum,SETVAL,semopts);}void set_all_sem(int sid,unsigned short val_array[]){  union semun semopts;  semopts.array=val_array;  semctl(sid,0,SETALL,semopts);}int rm_sem(int sid){  return(semctl(sid,0,IPC_RMID,0));}int sem_p(int sem_id,int id){  struct sembuf sb;  sb.sem_num=id;  sb.sem_op=-1;  sb.sem_flg=SEM_UNDO;  if(semop(sem_id,&sb,1)==-1)    {      printf("semaphore_p failed");      return 0;    }  return 1;}int sem_all_p(int sem_id,int id_1,int id_2){  struct sembuf sb[2];  sb[0].sem_num=id_1;  sb[0].sem_op=-1;  sb[0].sem_flg=SEM_UNDO;  sb[1].sem_num=id_2;  sb[1].sem_op=-1;  sb[1].sem_flg=SEM_UNDO;  if(semop(sem_id,sb,2)==-1)    {      printf("semaphore_p failed");      return 0;    }  return 1;}int sem_v(int sem_id,int id){  struct sembuf sb;  sb.sem_num=id;  sb.sem_op=1;  sb.sem_flg=SEM_UNDO;  if(semop(sem_id,&sb,1)==-1)    {      printf("semaphore_p failed");      return 0;    }  return 1;}int sem_all_v(int sem_id,int id_1,int id_2){  struct sembuf sb[2];  sb[0].sem_num=id_1;  sb[0].sem_op=1;  sb[0].sem_flg=SEM_UNDO;  sb[1].sem_num=id_2;  sb[1].sem_op=1;  sb[1].sem_flg=SEM_UNDO;  if(semop(sem_id,sb,2)==-1)    {      printf("semaphore_p failed");      return 0;    }  return 1;}

⌨️ 快捷键说明

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