天天看点

主线程和子线程总结

主线程和子线程总结
 运行结果  
主线程和子线程总结
主线程和子线程总结
主线程和子线程总结

  从上面可以看到: 【1】 如果主线程和子线程是并行的,虽然都是用while(1)但是倚靠

CPU的调度,主线程和子线程都有机会得到执行。

【2】 如果要在子线程里面改变主线程里面的数据,就在 pthread_create

里面的最后 一个参数使用传地址调用(void *)&c,否则使用传值调用(void *)c

【3】使用pthread_join的目的在于:怕主线程执行的过快,子线程还没有执行 主线程就执行完毕并且退出了。 使用detach属性的目的在于,使得主线程和子线程之间割断联系,主线程退出 子线程也不会挂掉,子线程 退出,主线程也不用回收子线程的资源。

因为在本例子中,主线程和子线程都是无限循环执行的,即寿命无限长,主线程 和子线程也不用关心谁先得到执行,也不用关心资源的回收,所以调用pthread_create 的使用也就没有回收pthread_t tt这个用于管理子设备号的ID,也没用调用pthread_join来 等待子线程退出。

主线程和子线程总结

 这是一个可以精确控制线程何时结束的例子。 【1】线程里面使用while循环不断的执行。如果想要使得线程 结束运行,只要使得那个enable = false就OK了。

【2】这里主线程创建子线程之后,使用pause();函数,主线程 就一直阻塞在pause函数里面,直到捕捉到某个信号,这里面 定义的是ctrl+c信号,捕捉到ctrl+c后,程序跳转到了函数handler _mini里面执行。

【3】然后就往下执行,执行pthread_join回收子线程的资源。最后 返回。 程序执行结果如下:  

主线程和子线程总结
主线程和子线程总结
 如果程序不适用signal注册,而是直接用pause函数 那么,程序接收到信号后,默认是终结整个进程  
主线程和子线程总结
主线程和子线程总结

继续阅读