0

我今天在 C 编程书的进程和线程章节中遇到了这行代码:

printf("[Child]  child thread id: 0x%x\n", (unsigned int)pthread_self());

我从未见过这部分(unsigned int)pthread_self(),我不知道第一对括号是做什么用的。任何的想法?

ps:

我记得在php的文档中,函数文档有类似的表达:

int time()

但在实际代码中,我们只使用了 part time(), int 是为了说明函数的返回值time()


更新:

我在书中输入了测试每个线程 id 的示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <sys/types.h>
#include <unistd.h>

int global = 5;

void* ChildCode(void* arg) {
    int local = 10;

    global++;
    local++; 
    printf("[Child]  child thread id: 0x%x\n", (unsigned int)pthread_self());
    printf("[Child]  global: %d  local: %d\n", global, local);

    pthread_exit(NULL);
}

int main() {
  pthread_t  childPid;
  int       local = 10;

    printf("[At start]  global: %d  local: %d\n", global, local);

  /* create a child thread */
  if (pthread_create (&childPid, NULL, ChildCode, NULL) != 0)
  {
    perror("create");
    exit(1);
  } else { /* parent code */
    global++;
    local--; 
    printf("[Parent] parent main thread id : 0x%x\n", (unsigned int)pthread_self());
    printf("[Parent] global: %d  local: %d\n", global, local);
    sleep(1);
  }
  printf("[At end] global: %d  local: %d\n", global, local);
  exit(0);
}

它给了我一些注意事项(不是警告不是错误):

clang example_thread.c 
/tmp/example_thread-9lEP70.o: In function `main':
example_thread.c:(.text+0xcc): undefined reference to `pthread_create'
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我不知道代码,知道吗?

4

4 回答 4

2

的返回值为pthread_self()a pthread_t(请参阅man pthread_self)。

(unsigned int) pthread_self()用于将 的返回值pthread_self()转换为无符号整数。

有关 C 中投射的更多信息,请参阅http://www.aui.ma/personal/~O.Ir ​​aqi/csc1401/casting.htm

于 2012-08-07T09:53:31.290 回答
1

这只是将函数的返回值转换为unsigned int.

就像:

pthread_t pthread_self_result;
pthread_self_result = pthread_self();
printf("[Child]  child thread id: 0x%x\n", (unsigned int)pthread_self_result);
于 2012-08-07T09:53:18.877 回答
1

括号将返回值转换为pthread_selfto unsigned intpthread_self返回pthread_t,这是一种未指定的算术类型,不适合与 一起使用printf

于 2012-08-07T09:53:25.347 回答
1

这就是 C 中所谓的“类型转换”。在这里,我们将 pthread_t 类型转换为 unsigned int 以打印它。请参考您的 C 语言手册

于 2012-08-07T09:54:23.413 回答