当前位置: 技术问答>linux和unix
关于 信号量操作函数semop 报 Invalid argument错误的问题
来源: 互联网 发布时间:2017-04-20
本文导语: 本帖最后由 only_yestoday 于 2013-08-02 09:02:21 编辑 主函数是把信号量 V了两次,然后又P几次,这是没问题的,当信号量得值变成0之后再V操作的话,信号量的值变成-1后程序就阻塞了。可是当我在当我开了几个线程后,然...
另外还是工作需要。测试程序如下面,并一起给出MAKEFILE
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
union semun
{
int val; // value for SETVAL
struct semid_ds *buf; // buffer for IPC_STAT, IPC_SET
unsigned short *array; // array for GETALL, SETALL
// Linux specific part
struct seminfo *__buf; // buffer for IPC_INFO
};
int sid;
int CreateSem(const char *pathname, int subid, int members, int initvar)
{
key_t key;
int sid,index;
union semun semopts;
if((key=ftok(pathname, subid))==-1)
{
perror("ftok erro!");
return -1;
}
if((sid=semget(key, members, IPC_CREAT))==-1)
{
perror("Fail to create semaphore !");
return -1;
}
semopts.val = initvar;
for(index = 0; index