首页 > Unix > Posix有名信号量控制进程并发

Posix有名信号量控制进程并发

1 动因
有些时侯需要同一个程序在某一个时刻只有一个在执行,即我们通常所说的排它性,Stevens的那本“进程间通信”的书给出了三种实现方式,我选了简单有效的一种,做了下面的一个测试用例.

2 测试用例程序代码

#include
#include
#include
#include

#define LOCK_FILE “pxsemlock”

void print(pid_t);

//定义Posix有名信号灯
sem_t *locksem;

//定义信号灯当前值
int val;

int main()
{
//打开一个信号灯, 初值设为1
locksem=sem_open(LOCK_FILE,O_CREAT,0644,1);

//*申请信号灯
sem_wait(locksem);
//调用共享代码段
print(getpid());
sleep(10);

//释放信号灯
sem_post(locksem);
printf(“I’m finished,my pid is %d\n”,getpid());
return 0;

//关闭信号灯
sem_close(locksem);
sem_unlink(LOCK_FILE);
exit(0);
}

void print(pid_t pid)
{
printf(“I get it,my pid is %d\n”,pid);
sem_getvalue(locksem,&val);
printf(“Now the value have %d\n”,val);
}

3 编译命令

gcc -o lockpxsem lockpxsem.c -lpthread

4 两个终端窗口测试及输出
窗口1:

./lockpxsem
I get it,my pid is 18910
Now the value have 0
I’m finished,my pid is 18910

窗口2:

./lockpxsem
I get it,my pid is 18918
Now the value have 0
I’m finished,my pid is 18918

窗口2的程序在窗口1释放信号灯之后才执行.

分类: Unix 标签: , ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.