在看《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水平啊。

    相关文章

      网友评论

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

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