与Sockets的线程间通信没有阻塞方法

时间:2011-02-10 19:44:43

标签: sockets blocking nonblocking

我现在已经成功启动了我想要为我的矢量时钟测试程序启动的线程数量。下一个问题似乎是线程间通信;线程读取的配置文件有一个IP地址列表(localhost)和端口组合,它们应该每个都开始监听给它们的端口,同时读取输入文件,告诉它们要么增加它们的逻辑时钟或者向某个其他线程发送消息。

如果我首先为每个线程创建ServerSockets,那么accept()方法将显然会阻塞,直到某人尝试通过套接字连接到该特定线程,同时此线程无法执行可能已在输入文件中指示的其他操作(它只有格式的行(“int sendMessageTo int”或“int incrementClock k” - 整数表示配置文件中的行,其中包含主机和端口列表)。有没有办法避免这种情况?

1 个答案:

答案 0 :(得分:0)

在Linux上,您可以使用accept4代替accept,并将SOCK_NONBLOCK作为flags参数传递。

在POSIX.1-2001,SVr4,4.4BSD符合系统上,您可以使用O_NONBLOCK设置fcntl