etopipe2\n"); write(fd2[1],pipe2,50); lockf(fd2[1],0,0); // S1=sem_open("A",O_EXCL); // sem_post(S1); // S3=sem_open("C",O_EXCL); // sem_post(S3); } } } else { while(1) { // S3=sem_open("C",O_EXCL); // sem_wait(S3); printf("process3isreadingmessagefrompipe2\n"); read(fd2[0],pipe3,50); printf("process3hadreceivedthemessage:%s\n",pipe3); // S4=sem_open("D",O_EXCL); // sem_post(S4); } }}程序运行结果:程序分析:程序实现了read,move和print的模拟。进程1将一个随机数传进pipe1,进程2从pipe1接收数据并将数据传送进pipe2,程序3从pipe2读出数据。这个程序同步上存在问题(同步的操作已注释)。刚开始我用的是无名信号灯,后来发现无名信号灯只能在一个进程内的不同线程之间使用,不同进程之间共享不了信号量。于是改用有名信号灯,改用有名信号灯后遇到了问题,使用sem_post()对有名信号灯操作时,信号量增加不了。S1=1;S2=0;S3=0;S4=1;process1process2process3while(1){P(S1)process1的操作V(S2)}while(1){P(S2)P(S4)process2的操作V(S1)V(S3)}while(1){P(S3)Process3的操作V(S4)}四、讨论、心得记录实验感受、上机过程中遇到的困难及解决办法、遗留的问题、意见和建议等。