现在的位置: 首页 > 综合 > 正文

进程间加锁(信号量)

2013年02月06日 ⁄ 综合 ⁄ 共 665字 ⁄ 字号 评论关闭

在网上搜了很多的资料,对于进程间的同步却很少,我这里实现了简单的互斥

对于信号量的创建就不介绍了,可以google一下。

 

 

int sem_lock(int key) /* 加锁 */
{
struct sembuf op;
op.sem_num = 0;
  op.sem_flg = SEM_UNDO;
op.sem_op = -1; //increment if abs(sem_op) < sem_val
if (semop(key, &op, 1) == -1)
perror("semop");
}
int sem_unlock(int key) /* 解锁 */
{
struct sembuf op;
op.sem_num = 0;
  op.sem_flg = SEM_UNDO;
op.sem_op = 1;
if (semop(key, &op, 1) == -1)
perror("semop");
}

 

但是这样对于初始化状态不好控制,必须用两个锁,所以我该用了这种加锁,初始化状态为1就可以了。

 

 

 

int sem_lock(int key)

{

struct sembuf op;

op.sem_num = 0;

  op.sem_flg = 0;

op.sem_op = -1; //-1 if abs(sem_op) >= sem_val

if (semop(key, &op, 1) == -1)

perror("semop");

}

 

 

int sem_unlock(int key)

{

struct sembuf op;

op.sem_num = 0;

  op.sem_flg = 0;

op.sem_op = 1;

if (semop(key, &op, 1) == -1)

perror("semop");

}

 

 

抱歉!评论已关闭.