小编tir*_*der的帖子

打开命名管道的顺序会导致可能的竞争条件吗?

我正在尝试通过命名管道使用 IPC 在两个进程之间创建非常基本的客户端服务器通信。

我有 2 个管道,即fifo_clientfifo_server

我有以下两个类fifoclient.c,并且fifoserver.c具有以下代码行来打开两个管道。

fifoclient.c

int client = open("fifo_client",O_WRONLY);
int server = open("fifo_server",O_RDONLY);
Run Code Online (Sandbox Code Playgroud)

fifoserver.c

int client = open("fifo_client",O_RDONLY);
int server = open("fifo_server",O_WRONLY);
Run Code Online (Sandbox Code Playgroud)

然而,只要简单地改变打开clientserver管道的顺序fifoserver.c,程序就会冻结。

冻结时代码是这样写的:

fifoserver.c

int server = open("fifo_server",O_WRONLY);
int client = open("fifo_client",O_RDONLY);
Run Code Online (Sandbox Code Playgroud)

请注意,在这种情况下server,管道先于管道打开client。这会导致程序不响应(可能是竞争条件?)。

有人可以解释发生了什么以及为什么吗?

编辑:

这是两个类的完整代码:

fifoserver.c

#define BUFSIZE 20
#include<stdio.h>
#include<fcntl.h>
int main()
{

    char buf[BUFSIZE];
    int client = open("fifo_client",O_RDONLY);
    int server = open("fifo_server",O_WRONLY);
    if( server<0 || client …
Run Code Online (Sandbox Code Playgroud)

c ipc pipe named-pipes

4
推荐指数
1
解决办法
1100
查看次数

将 java.util.function.Function 转换为 Kotlin 的函数式接口类型

我正在使用分别用 Java 和 Kotlin 编码的两个模块,因此需要一些互操作性。

在其中一种情况下,java 模块返回类型为 的函数接口java.util.function.Function,该接口将由 kotlin 代码使用。

我可以按原样使用 java 类型。但是,我希望能够将其转换为 kotlin 的本机类型,无论是它kotlin.Function还是kotlin.reflect.KFunction. 这样做的原因是能够支持与 java 模块类似的 kotlin 模块,该模块为客户端提供功能。

有什么办法可以做到这一点吗?

java android kotlin functional-interface

4
推荐指数
1
解决办法
1476
查看次数

标签 统计

android ×1

c ×1

functional-interface ×1

ipc ×1

java ×1

kotlin ×1

named-pipes ×1

pipe ×1