阿里云双十一优惠活动,点击链接进行购买: 一年仅需89元即可以购买服务器~。我个人服务器为2核4G配置,也更加推荐购买 2核4G三年799元 配置的服务器。
你可以跟着我的笔记 当我有一台服务器时,我做了什么 来开始维护服务器并搭建应用,将引导你使用 docker 和 k8s 搭建一个自己的服务器开发集群。

# POSIX Thread 编程

我们在日常编程中经常会听到线程这个词,无论你使用何种语言。比如 java 会经常说多线程,python 会说协程就是为了避免多线程的上下文切换,而 js 会经常提到单线程。

POSIX,指 Portable Operating System Interface,可移植操作系统接口。意思就是说,不同的操作系统有不同的 API,但是经过 POSIX 一层封装,你就可以使用统一的 API 在各种操作系统上进行编程。更多详情可以参考本篇文章 POSIX标准总体分析 (opens new window)

# 学习 Thread 的 API

如果要写一个最简单的线程,那有两个 API 是必不可少的,pthread_createpthread_join

# pthread_create

#include <pthread.h>

int pthread_create (
  pthread_t *thread,
  const pthread_attr_t *attr,
  void *(*start_routine) (void *),
  void *arg
);

这是在当前进程中新建一个线程的 API,作为一个专业的 API 调用工程师,只需要知道了参数及其返回值即可开始工作

  • thread
  • pthread_attr_t,可为 NULL
  • start_routine,执行函数,即该线程主要用来做什么
  • arg,执行函数的参数,可为 NULL

最后还差一个返回值,如果成功返回 0,如果失败返回非零的数字。

# pthread_join

#include <pthread.h>

int pthread_join (pthread_t thread, void **retval);

等待线程执行结束

  • thread
  • retval,可为 NULL

# 写一个最简单的线程

#include <pthread.h>
#include <stdio.h>
#include <unistd.h>

void *thread_function(void *arg) {
  printf("hello, world\n");
  sleep(10);
}

int main() {
  pthread_t thread;

  pthread_create(&thread, NULL, thread_function, NULL);
  pthread_join(thread, NULL);
}

打印结果

Thread Start
hello, world
Thread End

# 参考

Last Updated: 5/27/2020, 10:31:27 AM