C语言:并行线程?

C语言:并行线程?,c,multithreading,sockets,C,Multithreading,Sockets,基本上,我有两个套接字,我想并行运行,所以我不必等待一个套接字发送数据来接收另一个套接字的数据等等。 我可以通过分叉很容易地做到这一点,但是,为了更整洁,我想知道是否有一种方法可以从相同的过程中做到这一点 比如: #include <stdio.h> #include <stdlib.h> #include <time.h> void test(){ sleep(5000); } int main(int argc, char *argv[]

基本上,我有两个套接字,我想并行运行,所以我不必等待一个套接字发送数据来接收另一个套接字的数据等等。 我可以通过分叉很容易地做到这一点,但是,为了更整洁,我想知道是否有一种方法可以从相同的过程中做到这一点

比如:

#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; 
}
但两行输出都是相同的,因为sleep函数正在“其他地方”处理

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

所以,是的,如果你有任何例子,你可以用睡眠作为占位符,我对套接字很在行:我在Windows上,但是Unix版本也不错,或者更好,一个两者都能用的版本

编辑:谢谢你的回复。 我想我明白你的意思了:我有两个套接字,然后我调用select,它返回所有准备接收/发送数据的套接字,我发送/接收我的数据,然后循环返回。
但是,由于套接字尚未创建,我如何使用accept实现这一点呢?

您可以使用omp节或使用pthread/WinThread

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

或者在Unix上,通常的解决方案是

我不知道它在Windows上是否工作,或者是否有类似功能,但是总是有。

fork不是太粗了吗?@Joel-可能选择会更好-但对于大型服务器,fork是正常的!我宁愿尽可能远离线程。对于I/O绑定的任务,使用异步I/O似乎要容易得多。