曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 7922|回复: 0
打印 上一主题 下一主题

[基于Linux] 信号量的基本概念

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
跳转到指定楼层
楼主
发表于 2009-9-4 12:04:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
信号量是一个计数器,常用于处理进程或线程的同步问题,特别是对临界资源访问的同步。临界资源可以简单的理解为在某一时刻只能由一个进程或线程进行操作的资源,这里的资源可以是一段代码、一个变量或某种硬件资源。信号量的值大于或等于0 时表示可供并发进程使用的资源实体数;小于 0时代表正在等待使用临界资源的进程数。

与消息队列类似,Linux 内核也为每个信号集维护了一个 semid_ds 数据结构实例,该结构定义在头文件 linux/sem.h 中:
/* Obsolete, used only for backwards compatibility and libc5 compiles */
struct semid_ds {
        struct ipc_perm sem_perm;               /* permissions .. see ipc.h */
        __kernel_time_t sem_otime;              /* last semop time */
        __kernel_time_t sem_ctime;              /* last change time */
        struct sem      *sem_base;              /* ptr to first semaphore in array */
        struct sem_queue *sem_pending;          /* pending operations to be processed */
        struct sem_queue **sem_pending_last;    /* last pending operation */
        struct sem_undo *undo;                  /* undo requests on this array */
        unsigned short  sem_nsems;              /* no. of semaphores in array */
};
      sem_perm : 对信号量进行操作的许可权
      sem_otime : 对信号量操作的的最后时间
      em_ctime : 对信号量进行修改的最后时间
      sem_base : 指向第一个信号量
      sem_pending : 等待处理挂起的操作
      sem_pending_last : 最后一个正在挂起的操作
      undo : 撤销的请求
      sem_nsems : 数组中的信号数
其中,sem_base 成员对用户空间进程没多大作用,因为它指向内核的虚拟内存空间中的一个地址。此内存保存着一个 struct sem 结构的数组,信号量集中的每个信号量都有一个 sem 结构。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-19 08:50 , Processed in 0.075766 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表