当前位置: 技术问答>linux和unix
linux posix信号量使用疑问
来源: 互联网 发布时间:2017-03-02
本文导语: 首先用一个进程创建信号量,初始值设置为1,两个进程使用这个信号量访问共享资源: // Create semaphore sem_t * sem; sem = sem_open( SEM_NAME, OPEN_FLAG, OPEN_MODE, 1 ); if( SEM_FAILED == sem ) { fprintf(stdout, "ERROR: Create ...
首先用一个进程创建信号量,初始值设置为1,两个进程使用这个信号量访问共享资源:
两个进程使用上述创建的信号量
process1:
process2:
我的问题是:这两个进程可以同时获取信号量。我明明在创建的时候把信号量的值设置成1了啊。
// 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:
sem_t * sem = sem_open(SEM_NAME, 0);
if(sem != SEM_FAILED)
{
sem_wait(sem);
}
// some operation
sem_post(sem);
usleep(500000);
process2:
sem_t * sem = sem_open(SEM_NAME, 0);
if(sem != SEM_FAILED)
{
sem_wait(sem);
}
// some operation
sem_post(sem);
usleep(300000);
我的问题是:这两个进程可以同时获取信号量。我明明在创建的时候把信号量的值设置成1了啊。
|
是楼主糊涂了还是我糊涂了。
some operation是阻塞操作还是怎么了?
进程1睡的时候进程2不就可以跑了吗,这不都是一瞬间的事情吗。