加载中…
个人资料
来一桶
来一桶
  • 博客等级:
  • 博客积分:0
  • 博客访问:7,582
  • 关注人气:1
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
正文 字体大小:

linux 命名信号量实现进程间的互斥与同步

(2012-03-19 21:50:58)
标签:

杂谈

 

#include <stdio.h>
#include <errno.h>
#include <semaphore.h>
#include <fcntl.h>

#define SEM_NAME "mysem"
#define OPEN_FLAG O_RDWR|O_CREAT
#define OPEN_MODE 00777
#define INIT_V    0
static sem_t *sem = NULL;

static void mysem(char *str)
{
 int i = 0;
 while('\0' != str[i])
 {
  printf("%c\n", str[i++]);
  sleep(1);
 }
}


int main(void)
{

 pid_t pid = -1;
 int ret = -1;
 int status = -1;

 //创建一个命名信号量
 sem = sem_open(SEM_NAME, OPEN_FLAG, OPEN_MODE, INIT_V); 

 //创建子进程
 pid = fork();
 if(-1 == (ret = pid))
 {
  perror("fork failed: ");
  goto _OUT;
 }

 if(0 == pid)
 {
  mysem("abcd");
  //V操作
  sem_post(sem);
 }

 if(0 < pid)
 {
  //P操作
  sem_wait(sem);
  mysem("1234");
  //等待子进程结束
  wait(&status);
  //删掉在系统创建的信号量
  sem_unlink(SEM_NAME);
  //彻底销毁打开的信号量
  sem_close(sem);
 }

_OUT:
 return ret;
}

 

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
前一篇:mmap
后一篇:vim设置
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

    < 前一篇mmap
    后一篇 >vim设置
      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有