SO用户,
我有3个线程在任何给定时间同时运行,麻烦是在线程1尝试通过传递用户名连接到服务器之后调用线程2并且当线程1转动时服务器关闭其连接代码。
是否有任何地方我可以实现同时发送用户名和密码,而线程在此时相互中断?
THX! 尼迪
答案 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.。)使用多个连接