在看《Beginni...">
美文网首页
理解线程的小程序

理解线程的小程序

作者: Nisen | 来源:发表于2016-11-16 22:07 被阅读60次

一个简单的C语言实现的线程示例<a id="sec-1" name="sec-1"></a>

在看《Beginning Linux Programming》时,为了更好的理解线程的概念,书中列举了这样一个小例子:

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

void *thread_function(void *arg);
char message[] = "Hello World";

int main() {
  int res;
  pthread_t a_thread;
  void *thread_result;

  res = pthread_create(&a_thread, NULL, thread_function, (void *)message);
  if (res != 0) {
    perror("Thread creation failed");
    exit(EXIT_FAILURE);
  }
  printf("Waiting for thread to finish...\n");
  res = pthread_join(a_thread, &thread_result);
  if (res != 0) {
    perror("thread join failed");
    exit(EXIT_FAILURE);
  }
  printf("Thread joined, it returned %s\n", (char *)thread_result);
  printf("Message is now %s\n", message);
  exit(EXIT_SUCCESS);
}

void *thread_function(void *arg) {
  printf("thread_function is running, Argument was %s\n", (char *)arg);
  sleep(3);
  strcpy(message, "Bye!");
  pthread_exit("Thank you for the CPU time");
}

将程序编译链接后运行,可以看到下面这样的结果

➜  chapter12 ./thread
Waiting for thread to finish...
thread_function is running, Argument was Hello World
Thread joined, it returned Thank you for the CPU time
Message is now Bye!

这里使用 pthread_create 创建新线程, pthread_create 的定义如下:

#include <pthread.h>

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

根据 pthread_create 要求, thread_function 只有一个指向void的指针作为参数,返回的也是指向void的指针。
当创建新的线程后,新线程在 thread_function 中开始执行,打印自己的参数。
原有线程在确保新线程启动后调用 pthread_join 函数等到线程结束,并且将新线程的返回值存在 thread_result 指针里。
新线程可以直接访问 message 数组变量,如果是调用 fork() 的话就没有这种效果。

python也提供了处理线程相关的 thread 和 基于它上面抽象的 threading 等模块,将在以后的文章中探究。

不由感慨,如果不多懂一些C语言,那么很难提高自己Python水平啊。

相关文章

  • 理解线程的小程序

    一个简单的C语言实现的线程示例 在看《Beginni...

  • [Java]多线程

    #### 10.多线程 ①理解程序、进程、线程的概念 程序可以理解为静态的代码 进程可以理解为执行中的程序 线程可...

  • 多线程总结

    多线程 理解程序、进程、线程的概念 程序可以理解为静态的代码进程可以理解为执行中的程序。线程可以理解为进程的进一步...

  • java多线程

    理解程序、进程、线程的概念程序可以理解为静态的代码进程可以理解为执行中的程序 线程可以理解为进程的进一步细分,程序...

  • java多线程

    理解程序、进程、线程的概念程序可以理解为静态的代码进程可以理解为执行中的程序 线程可以理解为进程的进一步细分,程序...

  • JavaSE学习笔记——多线程

    理解程序、进程、线程的概念程序可以理解为静态的代码进程可以理解为执行中的程序线程是进程的进一步细分,理解为程序的一...

  • java多线程

    理解程序、进程、线程的概念 程序可以理解为静态的代码 进程可以理解为执行中的程序 线程可以理解为进程的进一步细分,...

  • setTimeout 在小程序中的问题

    小程序线程 小程序中包含两个线程 view 线程负责解析渲染页面(wxml和wxss) appServer 线程负...

  • Java 多线程

    一、概述 理解多线程先要理解线程,理解线程先要理解进程。 1. 进程 一个正在执行的程序。 每个进程的执行都有一个...

  • Day16-17 多线程

    多线程 程序可以理解为静态的代码 进程可以理解为执行中的程序。 线程可以理解为进程的进一步细分,程序的一条执行路径...

网友评论

      本文标题:理解线程的小程序

      本文链接:https://www.haomeiwen.com/subject/eaorpttx.html