pthread_join
- 摘要:pthread_join使一个线程等待另一个线程束。
代码中如果没有pthread_join主线程会很快结束从而使整个进程结束,从而使创建的线程没有机会开始执行就结束了。加入pthread_join后,主线程会一直等待直到等待的线程结束自己才结束,使创建的线程有机会执行。
- 函数pthread_join用来等待一个线程的结束。
目录
- 
1函数简介 
- 
2函数应用 
- ▪ linux中的应用
- ▪ pthread_join的应用
- 
3使用范例 
1函数简介编辑
2函数应用编辑
linux中的应用
attributes来设置当一个线程结束时,直接回收此线程所占用的系统资源,详细资料查看Threads attributes。
pthread_join的应用
3使用范例编辑
// 子线程阻塞,等待信号,然后输出字符串
// 主线程从键盘录入字符,给子线程发信号。
| 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
48 
49 
50 
51 
52 
53 
54 
55 
56 | 
#include <stdio.h> 
#include <unistd.h> 
#include <signal.h> 
#include <pthread.h> 
#include <time.h> 
pthread_t tid; sigset_t set; 
void
 myfunc() 
{ 
 printf("hello\n"); 
} 
static
 void* *p) 
{ 
 int
 signum; 
 while(1) { 
    sigwait(&set,&signum); 
   if(SIGUSR1 == signum) 
   myfunc(); 
   if(SIGUSR2 == signum) 
     { printf("I will sleep 2 second and exit\n"); 
      sleep(2000); break; 
     } 
    } 
} 
int
 main() 
{ 
  char
 tmp; 
  void* status; 
  sigemptyset(&set); 
  sigaddset(&set,SIGUSR1); 
  sigaddset(&set,SIGUSR2); 
  sigprocmask(SIG_SETMASK,&set,NULL); 
  pthread_create(&tid,NULL,mythread,NULL); 
  while(1) 
  { 
    printf(":"); 
    scanf("%c",&tmp); 
    if('a'
 == tmp) 
    { 
       pthread_kill(tid,SIGUSR1); //发送SIGUSR1,打印字符串。 
    } 
    else
 if('q'==tmp) 
    { 
      //发出SIGUSR2信号,让线程退出,如果发送SIGKILL,线程将直接退出。 
      pthread_kill(tid,SIGUSR2); 
      //等待线程tid执行完毕,这里阻塞。 
      pthread_join(tid,&status);
 
      printf("finish\n"); 
      break; 
    } 
    else 
      continue; 
  } 
  return
 0; 
} | 
| 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 | 
void
 * start_run(void * arg) 
{ 
  //do some work 
} 
int
 main() 
{ 
  pthread_t thread_id; 
  pthread_attr_t attr; 
  pthread_attr_init(&attr); 
  pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED); 
  pthread_create(&thread_id,&attr,start_run,NULL); 
  pthread_attr_destroy(&attr); 
  sleep(5); 
  exit(0); 
} | 
有,如果线程已经调用pthread_join()后,则再调用pthread_detach()则不会有任何效果。
pthread_join的更多相关文章
- 对线程等待函数pthread_join二级指针参数分析
		分析之前先搞明白,这个二级指针其实在函数内部是承接了上个线程的返回值. 看man手册,发现返回值是个普通指针.人家用二级指针来承接,可能准备干大事.这个可以自己搜索一下.原因嘛,二级指针是保存了这个地 ... 
- Linux多线程实例练习 - pthread_exit() 与 pthread_join()
		Linux多线程实例练习 - pthread_exit 与 pthread_join pthread_exit():终止当前线程 void pthread_exit(void* retval); pt ... 
- Linux线程-pthread_join
		pthread_join用来等待另一个线程的结束,函数原型如下: extern int pthread_join __P ((pthread_t __th, void **__thread_retur ... 
- pthread_detach pthread_join pthread_create
		pthread_create:创建线程以后线程直接开始运行: pthread_detach pthread_join:线程资源的释放方式. 创建一个线程默认的状态是joinable, 如果一个线程结束 ... 
- Linux 线程--那一年, 我们一起忽视的pthread_join
		前言: 通过linux的pthread库, 相信大家对创建/销毁线程肯定很熟悉, 不过对pthread_join是否知道的更多呢?实验: 先编写一个常规的程序 #include <pthread ... 
- pthread_join和pthread_detach的用法(转)
		一:关于join join join是三种同步线程的方式之一.另外两种分别是互斥锁(mutex)和条件变量(condition variable). 调用pthread_join()将阻塞自己,一直到 ... 
- 多线程:pthread_exit,pthread_join,pthread_self
		/*exit_join_id.c*/ #include<pthread.h> #include<stdio.h> void* eji(void* agr) { printf(& ... 
- linux线程之pthread_join和pthread_detach
		在任何一个时间点上,线程是可结合的(joinable)或者是分离的(detached).一个可结合的线程能够被其他线程收回其资源和杀死.在 被其他线程回收之前,它的存储器资源(例如栈)是不释放的.相反 ... 
- linux线程之pthread_join
		pthread_join使一个线程等待另一个线程结束. 代码中如果没有pthread_join:主线程会很快结束从而使整个进程结束,从而使创建的线程没有机会开始执行就结束了.加入pthread_joi ... 
随机推荐
- Linq中max min sum avarage count的使用
			一.Max最大值 static void Main(string[] args) { //Max求最大值 ,,,,,,,,,}; //方法1 Linq语句+Linq方法 var result = (f ... 
- 登录验证的js;JS验证邮箱 验证密码
			var auth_email = 0, auth_pwd = 0, auth_captcha = 0, url_ajax = "/protected/user_ajax.php"; ... 
- 编程实现Windows瞬间关机
			我们先来看看Windows正常的关机流程:①关机指令通知Windows子系统csrss.exe,csrss.exe收到通知后会和Winlogon.exe做一个数据交换,再由Winlogon.exe通知 ... 
- linux命令-sed,uniq,cut,wc
			sort sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序. sort语法 ... 
- 内联函数 inline  漫谈
			内联函数存在的结论是: 引入内联函数是为了解决函数调用效率的问题 由于函数之间的调用,会从一个内存地址调到另外一个内存地址,当函数调用完毕之后还会返回原来函数执行的地址.函数调用会有一定的时间开销,引 ... 
- word2010无法打开文件时的一点对策
			word2010无法打开文件时的一点对策 1. Word 安全模式启动,点击「开始」,在搜索栏中输入winword /safe并回车,测试问题是否依然存在? 2. 正常启动Word,点击“文件”—“选 ... 
- hdu 1535 Invitation Cards(SPFA)
			Invitation Cards Time Limit : 10000/5000ms (Java/Other) Memory Limit : 65536/65536K (Java/Other) T ... 
- HDU - 5753 多校联萌3-2
			题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5753 Sample Input Sample Output 6.000000 52.833333 分析 ... 
- ubuntu server 11.10 安装 oracle 10g XE
			1.将配置的Oracle源服务器的公钥添加在本地 apt 系统的密钥库中: wget http://oss.oracle.com/el4/RPM-GPG-KEY-oraclesudo apt-key ... 
- 使用PHP Socket 编程模拟Http post和get请求
			这里给大家分享一段使用PHP Socket 编程模拟Http post和get请求的代码,非常的实用,结尾部分我们再讨论下php模拟http请求的几种方法. <?php /** * 使用PHP ... 
