【发布时间】:2015-12-22 09:58:25
【问题描述】:
我想阻止所有其他线程执行,直到 SendReceive(Socket, strXmlFormat) 函数完成执行,因为它用于通过套接字发送数据并手动关闭连接。根据数据发送到服务器时的要求,在手动关闭连接之前,只需向服务器发送一个标志,就不必向它发送其他数据。所以我想要的是所有其他正在运行该进程的线程应该停止,直到这段代码完成执行。
process(int start, int end)
{
// Block other threads from executing while the current thread executes this code block
Socket = Connect(strSMSIP, strSMSPort);
SendReceive(Socket, strXmlFormat);
// undo blocking the threads
}
这是创建线程和分配进程的方式:
for (int i = 0; i < 5; i++)
{
int start = i+10
int end=start+10;
new Thread(delegate()
{
Process(start, end);
}).Start();
}
【问题讨论】:
-
per the requirement when the data is sent to the server ,no other data has to be sent to it until在存在多个客户端的情况下很难实现,甚至可能分布在多台机器上。一个简单的lock甚至机器范围的Mutex都无济于事。如果有的话,您最好在您的服务器上强制执行此要求。 -
@Christian.K 这个进程只能在一台机器上运行。
-
好的,那么如果该进程只有一个实例ever,那么请查看@Jakub Lortz 的答案。否则请查看
Mutex类以同步多个进程。 -
@Christian.K 它是一个 exe 文件,只能由调度程序在一台服务器上运行,但如果多个线程正在执行同一进程,该解决方案是否有效??
标签: c# multithreading sockets