C语言:并行线程?

时间:2011-05-05 16:29:32

标签: c multithreading sockets

基本上我有两个我希望并行运行的套接字,所以我不必等待一个套接字发送数据来接收来自其他套接字的数据。 我可以通过分叉轻松地做到这一点,但是,为了更整洁,我想知道是否有办法从同一个过程中做到这一点。

类似的东西:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void test(){
         sleep(5000);
}
int main(int argc, char *argv[])
{
  printf("%d\n",time(NULL));
  test();
  printf("%d\n",time(NULL));
  system("PAUSE");
  return 0; 
}

但两条输出线都是相同的,因为睡眠功能正在“其他地方”进行处理。

我找到了一个关于创建线程的MSDN文档,但是它谈到了C库函数不安全,这让我很担心,我喜欢我的stdlib!

所以,是的,如果你有任何例子,你可以使用sleep()作为占位符,我对套接字很好:)我在Windows上,但是Unix版本也会很好,或者更好的是,一个适用于两者的。

编辑:感谢您的所有回复。 我想我明白了你的意思:我有两个套接字,然后我调用select(),它返回所有准备接收/发送数据的套接字,我发送/接收我的数据,然后循环回来。 但是,我怎么能用accept()来实现它,因为尚未创建套接字?

4 个答案:

答案 0 :(得分:3)

最简单的方法是使套接字不阻塞,并使用select()和/或WaitForMultipleObjects()检查何时可以从/向每个套接字读取/写入更多数据。这样,应用程序可以保持单线程,同时仍然可以同时为多个套接字提供服务。

答案 1 :(得分:0)

您可以使用omp部分或使用pthread / WinThread

答案 2 :(得分:0)

或者在Unix上,正常的解决方案是fork()

答案 3 :(得分:0)

我不知道它在Windows上是否有效(或有模拟),但总是select