如何在同一个函数上编写pthread_create?

mak*_*ake 2 c c++ multithreading

有人可以帮忙吗?我有以下内容:

// part_1
if (pthread_create(&threadID, NULL, ThreadMain, 
    (void *) clientSocket) != 0) {
    cerr << "Unable to create thread" << endl;
    exit(1);
}

// part_2
void *ThreadMain(void *clientSocket) {

  pthread_detach(pthread_self()); 

  ...

  delete (TCPSocket *) clientSocket;
  return NULL;
}
Run Code Online (Sandbox Code Playgroud)

我想在part_1中有part_2(我的意思是不调用TreadMain()函数)

谢谢你的回复

bk1*_*k1e 6

如果你这样做怎么办?

pthread_create()必须为新线程创建一个新的堆栈才能使用.如果pthread_create()将现有线程的旧堆栈复制到单独的内存块中以创建新堆栈,那么指向其他局部变量的局部变量会发生什么?新堆栈上的局部变量将指向旧堆栈.当使用旧堆栈(被调用的堆栈)的线程pthread_create()返回或覆盖它们时,这些变量开始指向无效数据.

但那怎么样fork()?为什么不fork()采用函数指针pthread_create()?好吧,与之不同的是pthread_create(),创建的新执行线程fork()不必与旧的执行线程位于相同的地址空间中,因为它们位于不同的进程中.fork()克隆父进程的虚拟地址空间,堆栈,堆和所有.子进程的堆栈变量与父进程中的对应变量具有相同的虚拟地址.因此,无论旧的父进程对内存执行什么操作,新子进程中的所有指针都将继续有效*.

*Nitpicker的角落:排除开头无效的指针,以及故意共享的内存