Board logo

标题: 线程间共享变量的注意点 [打印本页]

作者: yuyang911220    时间: 2017-6-11 16:37     标题: 线程间共享变量的注意点

两个线程共享同一个变量是否需要加锁,  根据需要来定。
  但是如果两个线程有可能同时修改这个变量的话,
  那么一定是需要加锁的。
  代码中如果没有pthread_join主线程会很快结束从而使整个进程结束,从而使创建的线程没有机会开始执行就结束了。加入pthread_join后,主线程会一直等待直到等待的线程结束自己才结束,使创建的线程有机会执行。
  pthread_join函数及linux线程
  pthread_join使一个线程等待另一个线程结束。
  代码中如果没有pthread_join主线程会很快结束从而使整个进程结束,从而使创建的线程没有机会开始执行就结束了。加入pthread_join后,主线程会一直等待直到等待的线程结束自己才结束,使创建的线程有机会执行。
  所有线程都有一个线程号,也就是Thread ID。其类型为pthread_t。通过调用pthread_self()函数可以获得自身的线程号。
  下面说一下如何创建一个线程。
  通过创建线程,线程将会执行一个线程函数,该线程格式必须按照下面来声明:
  void * Thread_Function(void *)
  创建线程的函数如下:
  int pthread_create(pthread_t *restrict thread,
  const pthread_attr_t *restrict attr,
  void *(*start_routine)(void*), void *restrict arg);
  下面说明一下各个参数的含义:
  thread:所创建的线程号。
  attr:所创建的线程属性,这个将在后面详细说明。
  start_routine:即将运行的线程函数。
  art:传递给线程函数的参数。
  下面是一个简单的创建线程例子:
  #include <pthread.h>
  #include <stdio.h>
  /* Prints x’s to stderr. The parameter is unused. Does not return. */
  void* print_xs (void* unused)
  {
  while (1)
  fputc (‘x’, stderr);
  return NULL;
  }
  /* The main program. */
  int main ()
  {
  pthread_t thread_id;
  /* Create a new thread. The new thread will run the print_xs
  function. */
  pthread_create (&thread_id, NULL, &print_xs, NULL);
  /* Print o’s continuously to stderr. */
  while (1)
  fputc (‘o’, stderr);
  return 0;
  }




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0