共享内存信号量

这文章 不知怎么了被仍进回收站了;

除了用shm_open来mmap一块共享内存

用普通文件也可:

#include "util.h"
#include 
#include 
#include 
struct _shareobj
{
    sem_t mutex;
    int count;
}shareobj;

int main(int argc, char**argv)
{
    int fd = open("./share.tmp" , O_RDWR|O_CREAT, 0777);
//    write(fd,&shareobj,sizeof(shareobj));
    ftruncate(fd,sizeof(shareobj));
    struct _shareobj * ptr= mmap(NULL,sizeof(shareobj),PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
    sem_init(&ptr->mutex,1,1);
    ptr->count = 0;
    setbuf(stdout,NULL);
    if(0 == fork()){
        for(int i = 0; i < 10 ; ++i){
            sem_wait(&ptr->mutex);
            printf("child , count : %d\n" , ptr->count++);
            sem_post(&ptr->mutex);
        }
        return 0;
    }

    for(int i = 0 ; i < 10 ; ++i){
        sem_wait(&ptr->mutex);
        printf("parent , count:%d\n" , ptr->count++);
        sem_post(&ptr->mutex);
    }

    return 0;
}

 

你可能感兴趣的:(帮别人写作业,unixc,信号量,共享内存)