|
|
1
36
你就快到了。使用
"self-pipe" trick
. 打开一个管道,将其添加到
我在一个系统中看到了类似Windows技术的变体(事实上与上面的方法一起使用,由
|
|
|
2
3
使用管道而不是插座有点干净,因为不可能有另一个过程抓住它,把事情搞砸。
匿名管道将永远无法用于任何其他进程(除非您将其提供给它)。 您也可以使用信号,但在多线程程序中,您需要确保除所需线程外的所有线程都屏蔽了该信号。 |
|
|
3
1
我找到的使这个多线程安全的唯一方法是在select语句运行时在同一线程中关闭并重新创建套接字。当然,如果线程在select上阻塞,这是很困难的。然后进入windows调用QueueUserAPC。当windows在select语句中阻塞时,线程可以处理异步过程调用。您可以使用QueueUserAPC从其他线程对此进行调度。Windows中断select,在同一线程中执行函数,然后继续执行select语句。现在,您可以在APC方法中关闭套接字并重新创建它。保证线程安全,永远不会丢失信号。 |