多进程编程(二十)

2012-08-26 13:53:26 · 作者: · 浏览: 13899
nbsp;  }
                 else if (argv[1][0]=='a') {
                     first=0;
                     second=1;
                 }
                 else {
                     first=1;
                     second=0;
                 }
                 semid=semget(SEMKEY,2,0777);
                 psembuf.sem_op=-1;
                 psembuf.sem_flg=SEM_UNDO;
                 vsembuf.sem_op=1;
                 vsembuf.sem_flg=SEM_UNDO;
                 for (count=0;;xcount++) {
                     psembuf.sem_num=first;
                     semop(semid,&psembuf,1);
                     psembuf.sem_num=second;
                     semop(semid,&psembuf,1);
                     printf("proc %d count %d\n",getpid(),count);
                     vsembuf.sem_num=second;
                     semop(semid,&vsembuf,1);
                     vsembuf.sem_num=first;
                     semop(semid,&vsembuf,1);
                 }
             }
    24.sdenter()
        功能:共享数据段同步访问,加锁.
        语法:#include <sys/sd.h>
             int sdenter(addr,flags)
             char *addr;
             int flags;
        说明:用于指示调用进程即将可以访问共享数据段中的内容.
             参数addr为将一个sdget()调用的有效返回码.
             所执行的动作取决于flags的值:
             . SD_NOWAIT:若另一个进程已对指定的段调用本系统调用且还没
                 有调用sdleave(),并且该段并非用SD_UNLOCK标志创建,则调
                 用进程不是等待该段空闲而是立即返回错误码.
             . SD_WRITE:指示调用进程希望向共享数据段写数据.此时,另一
                 个进程用SD_RDONLY标志联接该共享数据段则不被允许.
        返回值:调用成功则返回0,否则返回-1.
    25.sdleave()
        功能:共享数据段同步访问,解锁.
        语法:#include <sys/sd.h>
          &