如果 pthreadId 在 Android 上的pthread_join(pthreadId, NULL)中为零会发生什么 ?就像下面的代码片段:
pthread_join(0, NNULL);
如果 pthreadId 在 Android 上的pthread_join(pthreadId, NULL)中为零会发生什么 ?就像下面的代码片段:
pthread_join(0, NNULL);
pthread_join() 用于等待线程 id指定的线程终止。这是必需的,以便进程在线程完成执行之前不应该退出。
线程由线程 id 标识。现在如果你给 0 作为线程 id,它将找不到线程并立即返回错误。
因此,如果您使用 0 作为创建的所有线程的线程 ID,则可能在线程完成分配的工作之前,该进程可能会退出。
在我的系统中,如果我将 0 作为线程 id,它会返回错误号 3(ESRCH 找不到具有该 ID 线程的线程。)
几点:
您可能需要线程 id 的抽象类型来打印其值。请在 /usr/include/.../pthreadtypes.h 中搜索以获取 pthread_t 的抽象类型。在我的系统中,它的unsigned long int。
/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:typedef unsigned long int pthread_t;
在使用 GDB 进行调试时,它为每个线程分配线程号。线程旁边是由 pthread_create 分配的线程 ID。对于线程号 1,线程 ID 为 0x7f5750718740。
(gdb) info threads
Id Target Id Frame
* 1 Thread 0x7f5750718740 (LWP 9215) "a.out" 0x00007f57502f2d2d in __GI___pthread_timedjoin_ex (
threadid=140012979980032, thread_return=0x0, abstime=0x0, block=<optimized out>) at pthread_join_common.c:89
2 Thread 0x7f574fef8700 (LWP 9216) "a.out" __lll_lock_wait ()
at ../sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:135
有关线程的更多信息,请查看Tech Easy。