理解线程1 C语言示例的程序

发布时间:2019-08-06 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了理解线程1 C语言示例的程序脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

一个简单c语言实现的线程示例

在看《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 %sn", (char *)thread_result);
  printf("Message is now %sn", message);
  exit(EXIT_SUCCESS);
}

void *thread_function(void *arg) {
  printf("thread_function is running, Argument was %sn", (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水平啊。

脚本宝典总结

以上是脚本宝典为你收集整理的理解线程1 C语言示例的程序全部内容,希望文章能够帮你解决理解线程1 C语言示例的程序所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。