多线程

发布时间:2022-07-02 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了多线程脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

 

一、pthread_create的子线程不要通过子线程启动函数的参数或者共享内存来获得线程id

  创建线程的函数pthread_create不保证线程执行的时机,得根据不同系统的具体实现来确定

#include <pthread.h>
int pthread_create(
                 pthread_t *restrict tidp,   //新创建的线程ID指向的内存单元。
                 const pthread_attr_t *restrict attr,  //线程属性,默认为NULL
                 void *(*start_rtn)(void *), //新创建的线程从start_rtn函数的地址开始运行
                 void *restrict arg //默认为NULL。若上述函数需要参数,将参数放入结构中并将地址作为arg传入。
                  );

  新创建线程的id是参数tidp指向的内存单元(FreeBSD中是线程数据结构的地址),通过pthread_create返回。但是在新建线程的函数(start_rtn所指向的函数)中不能从共享内存中读出或者从线程的启动例程中以参数的形式接收。因为在Pthread_create返回之前,tidp可能是未经初始化的。如下表所示,在线程开始执行时,tidp未经初始化,所以不能通过tidl来获得线程id。应该使用pthread_self()来在子线程内获得自己的线程id。

{
//伪代码
temp= new pthread_t() 创建线程数据结构
start_rtn()      //开始执行子线程
tidp=&amp;temp
return *tidp;
}

  另外还有一个问题,就是子线程的启动函数如果通过参数间接或者直接使用可变变量,则要小心可变变量被主线程或其他线程更改。

  参考:https://blog.csdn.net/MonroeD/article/details/60468294

 

脚本宝典总结

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

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

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