小弟是新手,问一下,在进程间通信里,semop()和semctl()函数的区别和用法,那位能详细解释一下,或提供些资料,谢谢!
by baiheng222 - 程序开发 - 2006-03-07 17:53:20 阅读(1316) 回复(2)
一直没有理解这个sembuf.sem_num到底是什么意思 到处都说sem_num是信号灯的编号,0对应第一个信号灯,1对应第二个信号灯 可在semop函数里,sem_num到底起什么作用?我以前一直取0值
There are two *.c. main.c{ semid=semget(mykey,size,IPC_CREAT|0777) short initarray[4],outarray[4]; initarray[0]=5; initarray[1]=10; initarray[2]=0; initarray[3]=0; semctl(semid,4,SETALL,initarray); semctl(semid,4,GETALL,outarray); printf("sem init vals %d %d %d %...
这两天做测试,发现在高并发情况下,semop()操作经常会返回EAGAIN(Resource temporarily unavailable)。 相关的手册对此的解释是: [RedHat Linux] EAGAIN An operation could not proceed immediately and either IPC_NOWAIT was asserted in its sem_flg or the time limit specified in time-out expired. [UnixWare] The operation would result in suspension of the calling process but (sem_flg&IPC_NOWAIT) is true. ...
程序运行一段时间后,semop( sem_id, &waits, 1);出错,strerror( errno)是: invalid argument。 困惑当中,为什么只是偶尔出这样的错 :?:
在用semget()获取信号量集的semid后,对信号量semctl()赋值。之后p,v操作。但semop()返回-1,打出 errno 为22,即EINVAL,意思是传入参数错误,不知怎么回事。是获取的semid太大了吗,一般情况下semget()返回的semid为多少,我的程序执行第一次返回semid为0,第二次为32767,第三次32767的两倍,第四次是三倍,依次。。。 不知怎么回事啊,请教,谢谢