是否使用kill发送到父线程的信号保证在下一个语句之前处理?

Jon*_*vis 0 c c++ linux multithreading pthreads

好的,所以如果我在Linux上运行子线程(如果重要的话使用pthreads),我运行以下命令

kill(getpid(), someSignal);
Run Code Online (Sandbox Code Playgroud)

它会将给定的信号发送给当前线程的父节点.

我的问题:在kill()运行后面的语句之前,是否保证父母会立即获得CPU并处理信号(如果是SIGKILL则杀死应用程序,或者如果是其他信号则执行其他任何操作)?或者是否可能 - 甚至可能 - kill()在父线程处理信号之前,任何后续命令都会运行?

Dav*_*har 5

不,这不能保证.

通常,除非使用显式同步机制(例如,phtread_mutex或信号量),否则不能对在单独的线程(或进程)中发生的事件的时间做出任何假设.

在多CP​​U(或多核)系统中尤其如此,其中多个线程可以在单独的CPU上同时运行,但即使在单CPU系统上也无法保证.