日期:2014-05-16  浏览次数:20653 次

linux posix信号量使用疑问
首先用一个进程创建信号量,初始值设置为1,两个进程使用这个信号量访问共享资源:
C/C++ code
// Create semaphore
sem_t * sem;
sem = sem_open( SEM_NAME, OPEN_FLAG, OPEN_MODE, 1 );
if( SEM_FAILED == sem )
{
    fprintf(stdout, "ERROR: Create semaphore...\n");
    exit(0);
}


两个进程使用上述创建的信号量

process1:

C/C++ code
sem_t * sem = sem_open(SEM_NAME, 0);
if(sem != SEM_FAILED)
{
    sem_wait(sem);
}
// some operation

sem_post(sem);
usleep(500000);


process2:

C/C++ code
sem_t * sem = sem_open(SEM_NAME, 0);
if(sem != SEM_FAILED)
{
    sem_wait(sem);
}
// some operation

sem_post(sem);
usleep(300000);



我的问题是:这两个进程可以同时获取信号量。我明明在创建的时候把信号量的值设置成1了啊。

------解决方案--------------------
探讨

是先调用了sem_wait啊,应该是第一个进程process1获得信号量以后,执行动作,释放信号量,休眠500毫秒,然后process2获得信号量,执行动作,释放信号量休眠300毫秒。

实际执行的时候,两个进程可以同时获取信号量,搞不懂啊,我是创建了一个二值的信号量啊。