2012-03-19 88 views
-1

我想在C中的套接字上执行多线程以便在两个不同的软件应用程序之间开发连接器。我希望它以下面的方式工作。一个软件将作为服务器开始运行,它将执行各种功能,包括监听指定端口上的套接字连接。该软件将自行运行,并仅在建立连接的网络套接字时使用数据并接收可靠的数据。因此,对于这部分,我希望能够监听连接,并且当其中一个分叉进程并且从此套接字接收到数据时,会设置一些将由其他更新线程使用的变量来通知它具有该变量可以考虑这些额外的精确信息。在这个等式的另一方面,我想创建一个程序,当它启动时将尝试连接到另一个应用程序的端口,一旦连接它,它将简单地调用一个函数,以非阻塞方式发送信息。我的整个目标是创建一个连接器,使其他两段代码的程序员能够感受到他们没有处理套接字。 我已经能够获得多线程套接字通信,但我现在试图修改这个,所以它将可用,因为我已经描述过,我很困惑如何避免多次访问该变量,将通知系统上的服务器端数据已经到达,并在客户端创建非阻塞交互。任何帮助不理解。 -TJC多线程死锁的线程事件

+2

你需要改善这个问题,显示一些代码和你关心的是什么。此外,有很多代码示例只是为了做这种事情 – 2012-03-19 23:26:56

+0

猜测我只是想找一个很好的例子来说明如何避免c中线程之间的死锁或通知..我在google上找到的所有东西都将我链接到C++或更新。 – 2012-03-19 23:30:39

+0

什么样的线程? – 2012-03-19 23:31:23

回答

0

的问题不是那么清楚,我,但如果你需要不同的软件很容易说话,你可以考虑使用一个框架,消息库像ZeroMQ www.zeromq.org

+0

好的解决方案,但有点矫枉过正我的处境...只是想写一个简单的套接字连接器,所以我们可以发送超过6-8的数据感兴趣的图像。 – 2012-03-19 23:45:07

0

好像你有双重生产者 - 消费者问题就在这里:

Client side     Server 
producer -> sender thread -> receiver thread -> consumer thread 

在这种情况下,使用最有用的数据结构是两侧阻塞队列,像英特尔TBB的concurrent_bounded_queue

这允许您从一个线程发布任务,并让其他线程以线程安全的方式提取数据。