![]() |
1
18
杀死一个线程意味着停止所有的执行。尤其是,它不会执行任何析构函数。这意味着套接字和文件不会被关闭,动态分配的内存不会被释放,互斥锁和信号量不会被释放,等等。杀死线程几乎可以保证会导致资源泄漏和死锁。 因此,你的问题有点颠倒了。真正的问题应该是:
因此,当确信不会发生泄漏和死锁时,您可以终止线程,而不是现在,也不是在修改另一个线程的代码时(因此,几乎不可能保证)。
此外,您将很快意识到每客户机线程方法不可扩展,因此您将更改您的体系结构,并无论如何重新编写大量的体系结构。 |
![]() |
2
7
|
![]() |
3
4
如果你用硬方法杀死你的线程,它会泄露资源。 在设计支持取消的线程时可以避免这种情况。 不要使用阻塞呼叫或使用超时阻塞呼叫。以较小的块或异步方式接收或发送数据。 |
![]() |
4
2
|
![]() |
5
2
如果一个线程在I/O中被阻塞,您不需要真正地杀死它,相反,您可以在非阻塞I/O、超时和从另一个线程关闭套接字之间进行选择。这两种方法都可以解除锁定线程。 |
![]() |
6
2
你真的不想这么做。 如果在线程保存关键部分时终止该线程,则不会释放该线程,这可能会导致整个应用程序崩溃。某些C库调用(如堆内存分配)使用关键部分,如果在线程执行“new”时碰巧终止线程,则从程序中的任何其他位置调用new都将导致该线程停止。 不能 在没有极端措施的情况下安全地执行此操作,这些措施比简单地向线程发送终止其自身的信号更具限制性。 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |
![]() |
user1700890 · 了解交互式代理Python API中的线程 2 年前 |
![]() |
AntonBoarf · 为什么要将实例变量指定给局部变量? 2 年前 |
![]() |
rhymes · 如何让线程操作相同的java列表 2 年前 |