.Multithreading net - 实现所选代码而不会被线程中断

时间:2009-08-14 19:15:06

标签: c# .net multithreading timeout

SO用户,

我有3个线程在任何给定时间同时运行,麻烦是在线程1尝试通过传递用户名连接到服务器之后调用线程2并且当线程1转动时服务器关闭其连接代码。

是否有任何地方我可以实现同时发送用户名和密码,而线程在此时相互中断?

THX! 尼迪

3 个答案:

答案 0 :(得分:5)

我非常怀疑这是真正的线程争用,这就是问题所在。

非常快速地线程化时间片,并且服务器必须有一个荒谬的短暂超时,以使您的诊断正确。

我的猜测是你的代码存在一些不同的错误,但如果没有看到某些代码,我们就无法确定它是什么。

答案 1 :(得分:1)

线程通常以毫秒为单位进行交换,因此我认为这不会导致程序断开连接。

也就是说,您可以实现锁/互斥锁以确保执行关键代码而无需其他线程执行其代码,甚至使用线程优先级来确保一个线程优先于其他线程 - 但是您不能强制线程不要屈服,操作系统可以决定你运行得足够长,并迫使你屈服。此外,在所有现代计划中,或多或少明确地阻止了您所寻找的行为,以防止其他流程的饥饿。

答案 2 :(得分:1)

看起来您正在尝试在一个套接字上复用多个数据流。因此,您可能在等待服务器时遇到线程切换问题,但如果是这种情况,您可能正在执行类似这样的操作,这是一种不适当的多线程方式。

void Task(int type)
{
  // Authenticate
  // Send Data
  // Disconnect
}

// Connect
Thread.Start(Task(1));
Thread.Start(Task(2));
Thread.Start(Task(3));

如果你有线程1,2和3在服务器上同时工作,你可以通过几种方法来实现它:

1。)您的工作是否使用不同的连接?

void Task(int type)
{
  // Connect
  // Authenticate
  // Send Data
  // Disconnect
}

Thread.Start(Task(1));
Thread.Start(Task(2));
Thread.Start(Task(3));

2。)你的工作是单线程的,只有一个连接

void Task(int type) {   //发送数据 }

//连接 //验证 任务1); 任务(2); 任务(3); //断开连接

3.。)使用多个连接