端口是使用标准输入输出与 Erlang 端通信的程序。是否需要线程安全取决于您实现的通信协议。
如果您认为端口是一个 erlang 进程(对于 erlang 端是您的 erlang 代码看到的抽象),您可以实现一个协议,无论您发送给它的每个请求,它都会阻塞,直到它发回响应,或者您可以并行发送多个请求并异步获取所有请求的响应。
在 C 端,前一种情况的实现将是一个简单的循环
- 从标准输入读取命令
- 处理该命令
- 将结果写入标准输出
- 去 1
并发在 erlang 端处理,因为所有传入的命令将堆积在端口收件箱中,而端口一次处理一个。
对于后者,您需要一种机制来异步处理输入消息 git remote add origin git@bitbucket.org:samuelrivas/dfberl.git,为了简单起见,我将在这里使用线程:
主循环:
- 从标准输入读取命令
- 产生一个线程来处理它
- 去 1
线程循环:
- 进程命令
- 将结果写入标准输出
请注意,线程在写入标准输出时需要某种锁定,我通常将该部分实现为另一个带有异步队列的线程,所有其他线程都将结果发布到该队列。
在第二种情况下,您将在 C 端具有并发性,因此您需要关心线程安全。在第一个中,C 端不处理任何并发,因此线程安全不是问题所在。