我对线程知之甚少,但我在控制台应用程序的主类中有一个名为SendProcessCmd(string cmd)的函数。在我的main()中,我创建了一个进程,并将StreamWriter存储为类成员var,而我的SendProcessCmd()向它发出.WriteLine()命令。
我有一个TCP服务器的另一个线程侦听连接,然后允许它们使用Program.SendProcessCmd()向进程发送命令。这样做是否安全?
我能想到的最安全的方法是在服务器的线程中找到正在运行的进程,创建一个新的StreamWriter,然后发出命令。然而,这似乎是一个很长的路要走同样的事情。
答案 0 :(得分:2)
线程的全部目的是始终可以调用任何函数并从任何线程访问任何数据结构。但是有一些问题:
答案 1 :(得分:2)
如果我理解正确,听起来这两个线程都将使用相同的StreamWriter。如果这是正确的,那么您至少需要使用Monitor将写入同步到StreamWriter。
如果每个线程正在使用对Write方法的多次调用来构建完整的消息,则需要阻止其他线程在完成消息的组成部分所需的整个持续时间内写入,否则您的消息组件将变为混合这就像有两个人试图在同一个地方同时在同一张纸上书写,每个人都写不同的故事。
答案 2 :(得分:1)
执行任何代码和访问内存对于任何数量的线程同时执行都是完美的。你需要注意的是两个线程试图写入相同的内存区域