如何在C/C++中使用源代码级多线程



我需要在MS Windows上使用2个硬件CPU来获得性能。我写了以下代码:

#include "windows.h"
int main1(int argc, CHAR* argv[])
{
    // ...
}
int main2(int argc, CHAR* argv[])
{
    // ...
}

编写两个主要功能-每个CPU一个。编译器告诉我:

D:/MinGW/x86_64-w64-mingw32/lib/../lib/libmingw32.a(lib64_libmingw32_a-crt0_c.o):crt0_c.c:(.text+0x3d): undefined reference to `WinMain'
collect2.exe: error: ld returned 1 exit status

我做错了什么?如何编写两个主电源,使它们在两个不同的CPU上运行?_tmain1, _tmain2也没有帮助。

一个进程中只能有一个main函数。通过该函数,您可以启动多个线程。这里有一个很短的例子:

#include <iostream>
#include <Windows.h>
#include <process.h>
void thread_func(void* v)
{
   std::cout << "Hello: " << *(int*)v << std::endl;
}
int main()
{
   int i = 1;
   ::_beginthread(thread_func, 0, &i);
   int i2 = 2;
   _beginthread(thread_func, 0, &i2);
   Sleep(1000);
}

创建一个main,然后启动另一个线程,为其设置处理器相关性。

伪代码:

int main1(){...}
int main2(){...}
int main()
{
  main2_thread = StartThreed( main2 );
  SetProcessorAffinity( this_thread, 0 );
  SetProcessorAffinity( main2_thread, 1 );
  main1();
}

只生成一个main,然后从那里启动多个线程。或者一个main,在那里你可以分叉几个进程。

相关内容

  • 没有找到相关文章

最新更新