下面的服务器代码将其中一个字符串放入共享内存变量中。
客户端代码显示共享内存中可用的字符串。
完整代码:在这个 github 链接中可用
服务器.c
int main(int argc, char *argv[])
{
/* code to create posix shared memory and posix named semaphore */
/* critical section start */
snprintf(shared_msg->content, MAX_MSG_LENGTH, "%s", argv[1]);
/* critical section end */
}
客户端.c
int main(int argc, char *argv[])
{
/* code to open posix shared memory and posix named semaphore */
for(i=0; i<20; i++){
/* critical section start */
//operation of semaphore
while(loop < 15){
printf("Type : %d, content : %s\n", shared_msg->type, shared_msg->content);
sleep(1);
loop++;
}
/* Critical section end */
loop = 0;
printf("loop %d finished\n", i);
}
}
如何在上述代码中使用(等待和发布)POSIX 信号量,以实现以下要求
- 当客户端启动时,它必须显示共享内存数据。一旦内部while循环完成,则只有客户端释放共享内存。
- 如果服务器启动并尝试将数据写入共享内存,当客户端在循环运行时,信号量将不允许写入,直到客户端释放信号量。
- 单行服务器必须在客户端释放信号量时写入
谢谢。