首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

信号量,该怎么处理

2012-05-24 
信号量请大家帮分析下,信号量这么用对吗?加锁的话不应该资源减一吗?我看代码里这么用也没报错呢?[codeC/C

信号量
请大家帮分析下,信号量这么用对吗?加锁的话不应该资源减一吗?我看代码里这么用也没报错呢?

[code=C/C++][/code]

int kb_sem_lock()
{
int rv = 0;
struct sembuf operation[2];

operation[0].sem_num = 0;
operation[0].sem_op = 0;
operation[0].sem_flg= SEM_UNDO;
operation[1].sem_num = 0;
operation[1].sem_op = 1;
operation[1].sem_flg= SEM_UNDO;
rv = (semop(kb_sem_id, &operation[0], 2));
return rv;
}

int kb_sem_unlock()
{
struct sembuf operation[1];
int rv = 0;
operation[0].sem_num = 0;
operation[0].sem_op = -1;
operation[0].sem_flg= SEM_UNDO;

rv = semop(kb_sem_id, &operation[0], 1);
return rv;
}

[解决办法]
用了两个信号灯?

对于简单的同步,一般使用单个信号灯就行了
初值为1,加锁时-1,解锁时+1

热点排行