【发布时间】:2021-12-28 18:36:25
【问题描述】:
我的理解是,如果不是所有系统调用,一些系统调用可能会阻塞。这是阻塞电话吗?我想在重复调用且对时间敏感的函数中获取唯一的线程 ID。我打算这样做:
//header.h
#define _GNU_SOURCE
#include <sys/syscall.h>
#ifdef SYS_gettid
#define gettid() syscall(SYS_gettid)
#else
#define gettid() 0
#endif
//file.c
#include "header.h"
...
void function()
{
pid_t thread = gettid();
//Logic based on thread
...
}
这里的函数会被重复调用并且不能阻塞。也许我应该使用pthread_self() 和pthread_equal(t1, t2)?
谢谢。
编辑:我同样可以使用其中任何一个。我知道它们不提供相同的返回值,但我将对线程 id 执行的逻辑是将其与一组已知的线程 id 进行比较,以基本上找出是谁在调用它。我保存了 gettid() 返回值和 pthread_self() reutrn 值。
【问题讨论】:
-
我无法想象这会阻止的任何原因。它只是从内核数据结构中检索一个值,无需等待。
-
这不是“阻塞系统调用”,但请记住,所有系统调用都是调度程序决定是时候做其他事情的机会。 (当然,这也可能发生在任何其他时间,但系统调用更有可能)