Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2533
  • 博文数量: 8
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 50
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-16 19:34
文章分类
文章存档

2012年(8)

我的朋友
最近访客

发布时间:2012-12-17 23:02:44

Linux中可以用于进程同步的信号量有两大类,一种是system v标准的semphare,一种是posix中定义semphare,这种又分为两类,一类是named semphare,一类是unnamed semphare。named semphare使用 sem_t *sem_open(const char *name, int oflag, mode_t mode, unsigned int value);创建,并且需要提供sem的name,不相关的进程通过这个那么来引用sem进行同步,kernel 2.6之前Linux只支持unnamed的se......【阅读全文】

阅读(81) | 评论(0) | 转发(0)

发布时间:2012-12-17 23:02:23

信号量信号量分有名和无名信号量。它们的区别和管道及命名管道的区别类似。有名信号量要求创建一个文件,而无名信号量则直接保存在内存中。 一,Posix信号量 Po***信号量接口总结(见下图): 上面一行是有名信号量,可于fifo相类比,其值保存在文件中,可用于进程和线程同步; 下面一行是无名信号量,可与pipe相类比,其值保存在内存中,可用于进程和线程同步; 中间部分,是两者的公用接口。 sem_open()                 &......【阅读全文】

阅读(100) | 评论(0) | 转发(0)

发布时间:2012-12-17 22:58:31

semget()     可以使用系统调用semget()创建一个新的信号量集,或者存取一个已经存在的信号量集: 系统调用:semget();原型:intsemget(key_t key,int nsems,int semflg);返回值:如果成功,则返回信号量集的IPC标识符。如果失败,则返回-1:errno=EACCESS(没有权限)EEXIST(信号量集已经存在,无法创建)EIDRM(信号量集已经删除)ENOENT(信号量集不存在,同时没有使用IPC_CREAT)ENOMEM(没有足够的内存创建新的信号量集)ENOSPC(超出限制) &n......【阅读全文】

阅读(16) | 评论(0) | 转发(0)

发布时间:2012-12-17 22:57:32

POSIX信号量 与POSIX信号量比较System V信号量潜在的学习曲线要高得多,当阅读完这个部分并和上面System V的部分对比,你就会更加的这么认为。 首先,POSIX使用简单的语义去创建、初始化和对信号量进行操作。它们提供了一个有效的方式来处理进程间通讯。POSIX有两种类型的信号量,有名信号量和无名信号量。 有名信号量 如 果你看man手册,你将会看到一个有名信号量像system v信号量一样由一个名字标识,并且类似的这个信号量也有内核存留。这就意味着这些信号量像system V一样是系统范围值并且在任何时候可存活并被限制一定的值之内。有名信号的优点是它们提供了一种......【阅读全文】

阅读(71) | 评论(0) | 转发(0)

发布时间:2012-12-17 22:28:02

信号量(semaphore)   Linux内核的信号量在概念和原理上与用户态的System V的IPC机制信号量是一样的,但是它绝不可能在内核之外使用,因此它与System V的IPC机制信号量毫不相干。   信号量在创建时需要设置一个初始值,表示同时可以有几个任务可以访问该信号量保护的共享资源,初始值为1就变成互斥锁(Mutex),即同时只能有一个任务可以访问信号量保护的共享资源。   一个任务要想访问共享资源,首先必须得到信号量,获取信号量的操作将把信号量的值减1,若当前信号量的值为负数,表明无法获得信号量,该任务必须挂起在该信号量的等待队列等待该信号量可用;若当前信号量的值为非负......【阅读全文】

阅读(19) | 评论(0) | 转发(0)
给主人留下些什么吧!~~
留言热议
请登录后留言。

登录 注册