📄 server_sm.c
字号:
#include <stdio.h>
#include <sys/time.h>
#include <sys/shm.h>
#include <sys/sem.h>
#define MEM_KEY 99
#define SEM_KEY 9900
#define SEG_SIZE 512
#define BUFF_SIZE 256
int main()
{
int seg_id;
int semset_id;
char *mem_ptr;
struct sembuf action;
seg_id = shmget(MEM_KEY,SEG_SIZE,IPC_CREAT|0777);
if(seg_id==-1)
{
printf("shmget error!\n");
return -1;
}
mem_ptr = shmat(seg_id,NULL,0);
if(mem_ptr == (void*)-1)
{
printf("shmat error!\n");
return -1;
}
semset_id = semget(SEM_KEY,1,(0666|IPC_CREAT|IPC_EXCL));
if(semset_id==-1)
{
printf("semget error!\n");
return -1;
}
action.sem_num = 0;
action.sem_flg = SEM_UNDO;
action.sem_op = 1;
int usec;
int sec;
int min;
struct timeval tvBefore;
struct timeval tvAfter;
struct timezone tzBefore;
struct timezone tzAfter;
unsigned int i = 1;
char buf[BUFF_SIZE] = {0};
gettimeofday (&tvBefore, &tzBefore);
while(i<100000)
{
semop(semset_id,&action,1);
memcpy(buf,mem_ptr,BUFF_SIZE);
action.sem_op = -1;
semop(semset_id,&action,1);
i++;
}
gettimeofday (&tvAfter, &tzAfter);
printf("i = %ld\n",i);
usec = tvAfter.tv_usec - tvBefore.tv_usec;
sec = tvAfter.tv_sec - tvBefore.tv_sec;
min = tzAfter.tz_minuteswest - tzBefore.tz_minuteswest;
printf("minutes = %d\nseconds = %d\n useconds = %d\n",min,sec,usec);
shmdt(mem_ptr);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -